CF527E Data Center Drama(构造+欧拉回路)
大意:
给你一个无向图。
要求加最少的边,然后给这些无向图的边定向,使得每一个点的出入度都是偶数。
输出定向后的边数和边集。
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(构造+欧拉回路)的更多相关文章
- CF527E Data Center Drama
链接CF527E Data Center Drama 题目大意:给你一个无向图,要求加最少的边,然后给这些无向图的边定向,使得每一个点的出入度都是偶数. \(n<=10^5,n\leq 2*10 ...
- 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 ...
- 「CF527E」 Data Center Drama
「CF527E」 Data Center Drama 传送门 显然一个环肯定满足题目条件. 然后我就开始想:先整一棵 \(\texttt{DFS}\) 树,然后非树边从深度深的节点向深度浅的节点连边, ...
- Codeforces 527E Data Center Drama(欧拉回路)
题意: 给定一个无向图连通图,把这个的无向边变成有向边,并添加最少的有向边使这个图每个结点的出度为偶数. Solution: 题目很长,并且很多条件说的不太直接,确实不太好懂. 首先先看得到的无向图, ...
- Data Center Drama 欧拉回路的应用
这题说的是给了n个点 和m条边, 这m条边是无向的,任务是将这些边变成有向的,并且添加最少的有向边使得这个图中每个点的入度为偶数, 出度为偶数. 我们可以考虑使用欧拉回路来解决这个问题,这样说,假如一 ...
- Codeforces Gym 100513D D. Data Center 前缀和 排序
D. Data Center Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/560/proble ...
- Data Center手册(4):设计
基础架构 拓扑图 Switching Path L3 routing at aggregation layer L2 switching at access layer L3 switch融合了三种功 ...
- Data Center手册(2): 安全性
有个安全性有下面几种概念: Threat:威胁 Vulnerability: 安全隐患 Attack: 攻击 有关Threat 常见的威胁有下面几种 DoS(Denial of Service拒绝服务 ...
- Data Center手册(1):架构
如图是数据中心的一个基本架构 最上层是Internet Edge,也叫Edge Router,也叫Border Router,它提供数据中心与Internet的连接. 连接多个网络供应商来提供冗余可靠 ...
随机推荐
- springboot注解@SpringBootApplication分析
@SpringBootApplication注解用在Spring Boot的入口类上面,是Spring Boot提供的应用启动相关的注解. 直接上注解的源码: @Target(ElementType. ...
- [转帖]Linux下fork函数及pthread函数的总结
Linux下fork函数及pthread函数的总结 https://blog.csdn.net/wangdd_199326/article/details/76180514 fork Linux多进程 ...
- Oracle NVL空值处理函数
--NVL空值处理函数 --需求:显示价格表中业主类型ID为1的价格记录 如果上限值为null,则显示9999999 ) from dual; select * from t_pricetable ) ...
- NIO服务器与客户端
这里客户端没有采用NIO形式 服务器: package com.util.Server.NIO; import javax.print.DocFlavor;import java.io.IOExcep ...
- 设计模式笔记:简单工厂模式(Simple Factory)
1. 简单工厂模式简介 1.1 定义 简单工厂模式:定义一个Factory类,可以根据参数的不同返回不同类的实例,被创建的实例通常有共同的父类. 简单工厂模式:只需要一个Factory类. 简单工厂模 ...
- Yii2写日志总结
方法一 批量文件配置写入日志: 1. 首先在config.php配置文件中配置log模块 如下: 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, ...
- rabbitmq 配置
1, 安装 apt-get install rabbitmq-server -y 2, 打开管理页面 sudo rabbitmq-plugins enable rabbitmq_management ...
- 初识Xml。
/* * 一.Xml? * * 1.是什么? * Extensible markup Language 可拓展标记性语言 * 功能是 储存数据 * 1.配置文件 * 2.在网络中传输数据 * xml和 ...
- static类型的变量
c语言中变量的储存类型有以下四种 auto 如果没有定义储存类型 默认就是这个类型 比如 int a = 10; 储存类型就是 auto:编译器会跟你定义的位置,以及用途,自动帮你决定使用那 ...
- hdu-2072(字典树)
字典树模板题 代码 #include<iostream> #include<algorithm> #include<cstdio> #include<cstr ...