题目链接

大意:

给你一个无向图。

要求加最少的边,然后给这些无向图的边定向,使得每一个点的出入度都是偶数。

输出定向后的边数和边集。

n<=10^5 m<=2*10^5


很巧妙的构造题……

可以发现答案的下界是\(度数为奇数的点个数m + 度数为奇数的点个数/2\)

因为是无向图,度数为奇数的点不可能有奇数个,于是考虑往每两个度数为奇数的点间连一条边。于是就可以愉快地跑欧拉回路啦。跑出来后在欧拉回路上构造像\(a\rightarrow b\leftarrow c\rightarrow d ……y\rightarrow x\leftarrow a\)这样的路径就行了,相当于把每个点的度数平分。

那如果构造出来的欧拉回路是类似于\(a- b- c- a\)这样,只有奇数条边,怎么分都分不好怎么办?起点和终点加个自环就OK了。

代码:

#include <bits/stdc++.h>
#define N 100005
using namespace std;
void rd(int &x){
    int y=0;char c=getchar();
    while(c<'0' || c>'9') c=getchar();
    while(c>='0' && c<='9') y=y*10+c-'0',c=getchar();
    x=y;
}
struct ed{
    int v,nxt;
    bool f;
}e[N<<3];
int head[N],cnt=1,deg[N],p[1000005],tot=0;
bool vis[N];
void add(int u,int v){
    e[++cnt]=(ed){v,head[u],0},head[u]=cnt;
    e[++cnt]=(ed){u,head[v],0},head[v]=cnt;
}
void dfs(int u){
    for(int &i=head[u];i;i=e[i].nxt){
        int to=e[i].v;
        if(!e[i].f){
            e[i].f=1;
            e[i^1].f=1;
            dfs(to);
        }
    }
    p[++tot]=u;
}
int main(){
    int n,m,a,b,ans=0,lst=0,qwq=0,i;
    rd(n),rd(m);
    for(i=1;i<=m;++i){
        rd(a),rd(b);
        add(a,b);
        deg[a]++,deg[b]++;
    }
    for(i=1;i<=n;++i){
        if(deg[i]&1){
            ans++;
            if(ans%2==1) lst=i;
            else if(lst) add(lst,i);
        }
    }
    m+=ans/2;
    if(m&1) add(1,1),m++;
    printf("%d\n",m);
    for(i=1;i<=n;++i){
        if(!vis[i]){
            tot=qwq=0;
            dfs(i);
            for(i=1;i<tot;++i) printf("%d %d\n",p[i+qwq],p[i+(!qwq)]),qwq^=1;
        }
    }
}

CF527E Data Center Drama(构造+欧拉回路)的更多相关文章

  1. CF527E Data Center Drama

    链接CF527E Data Center Drama 题目大意:给你一个无向图,要求加最少的边,然后给这些无向图的边定向,使得每一个点的出入度都是偶数. \(n<=10^5,n\leq 2*10 ...

  2. Codeforces Round #296 (Div. 1) C. Data Center Drama 欧拉回路

    Codeforces Round #296 (Div. 1)C. Data Center Drama Time Limit: 2 Sec  Memory Limit: 256 MBSubmit: xx ...

  3. 「CF527E」 Data Center Drama

    「CF527E」 Data Center Drama 传送门 显然一个环肯定满足题目条件. 然后我就开始想:先整一棵 \(\texttt{DFS}\) 树,然后非树边从深度深的节点向深度浅的节点连边, ...

  4. Codeforces 527E Data Center Drama(欧拉回路)

    题意: 给定一个无向图连通图,把这个的无向边变成有向边,并添加最少的有向边使这个图每个结点的出度为偶数. Solution: 题目很长,并且很多条件说的不太直接,确实不太好懂. 首先先看得到的无向图, ...

  5. Data Center Drama 欧拉回路的应用

    这题说的是给了n个点 和m条边, 这m条边是无向的,任务是将这些边变成有向的,并且添加最少的有向边使得这个图中每个点的入度为偶数, 出度为偶数. 我们可以考虑使用欧拉回路来解决这个问题,这样说,假如一 ...

  6. Codeforces Gym 100513D D. Data Center 前缀和 排序

    D. Data Center Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/560/proble ...

  7. Data Center手册(4):设计

    基础架构 拓扑图 Switching Path L3 routing at aggregation layer L2 switching at access layer L3 switch融合了三种功 ...

  8. Data Center手册(2): 安全性

    有个安全性有下面几种概念: Threat:威胁 Vulnerability: 安全隐患 Attack: 攻击 有关Threat 常见的威胁有下面几种 DoS(Denial of Service拒绝服务 ...

  9. Data Center手册(1):架构

    如图是数据中心的一个基本架构 最上层是Internet Edge,也叫Edge Router,也叫Border Router,它提供数据中心与Internet的连接. 连接多个网络供应商来提供冗余可靠 ...

随机推荐

  1. [翻译]在asp.net core2.0 OpenID Connect Handler中丢失了声明(CLaims)?

    注:这是一篇翻译,来自这里.这篇文章讲述了在asp.net core2.0中使用openid connect handler的过程中解析不到你想要的claim时,你可以参考这篇文章. Missing ...

  2. C#的修饰符

    C#的修饰符 废话少说,直接上总结: 一.在命名空间下: 类:默认修饰符为internal 接口:默认的修饰符为internal 结构体:默认的修饰符为internal 枚举:默认的修饰符为inter ...

  3. MyBatis源码分析1 参数映射分析

    首先我们拿出之前的代码,在如图位置打上断点,开始调试 我们规定了一个mapper接口,而调用了mapper接口的getEmpByIdAndLastName,我们并没有实现这个接口,这是因为Mybati ...

  4. 手机端图像编辑上传-cropper

    编辑头像,实现相册,照像功能,并能缩放裁剪功能,可自定义UI,引用'cropper.js', 'exif.js' /*初始化裁剪插件*/ var screenWidth = $(window).wid ...

  5. docker遇到的问题以及docker 操作镜像的基本操作

    root@localhost ~]# systemctl status docker.service ● docker.service - Docker Application Container E ...

  6. WPF 将数据源绑定到TreeView控件出现界面卡死的情况

    首先来谈一下实现将自定义的类TreeMode绑定到TreeView控件上的一个基本的思路,由于每一个节点都要包含很多自定义的一些属性信息,因此我们需要将该类TreeMode进行封装,TreeView的 ...

  7. 记一次阿里云服务器被用作DDOS攻击肉鸡

    事件描述:阿里云报警 ——检测该异常事件意味着您服务器上开启了"Chargen/DNS/NTP/SNMP/SSDP"这些UDP端口服务,黑客通过向该ECS发送伪造源IP和源端口的恶 ...

  8. 【python练习题】程序8

    #题目:输出 9*9 乘法口诀表. for i in range(1,10): k = '' for j in range(1,i+1): k += '%s * %s = %s '%(i,j,i*j) ...

  9. caffe boost cuda __float128 undefined

    转载:https://blog.csdn.net/thesby/article/details/50512886 编译caffe-master时遇到的问题,__float128未定义,使用到cuda版 ...

  10. 在一般类中通过XmlWebApplicationContext对象获取应用部署上下文Context

    XmlWebApplicationContext xwac = (XmlWebApplicationContext) ContextLoader.getCurrentWebApplicationCon ...