Data Center Drama 欧拉回路的应用
这题说的是给了n个点 和m条边, 这m条边是无向的,任务是将这些边变成有向的,并且添加最少的有向边使得这个图中每个点的入度为偶数, 出度为偶数。
我们可以考虑使用欧拉回路来解决这个问题,这样说,假如一个图如果满足欧拉回路,那么 a b c d a , a - > b <-c ->d <-a 只要这样一下就解决了问题。我们知道要使得这个图是欧拉回路,必须满足每个点的度数为偶数 我们将度数为奇数的点, 两两一对 形成一条边。然后跑一个欧拉回路,接着像上面举得例子一样 同时给一个点增加两个出度或者增加两个入度, 但是可能会有问题存在就是起始点 我们可以知道当边为奇数的时候,起点的入度和出度为奇数,我们在给他俩一个自环就解决了。
#include <iostream>
#include <algorithm>
#include <string.h>
#include <cstdio>
using namespace std;
const int maxn=+;
const int M =+;
int G[maxn],next[M*],num,To[M*],d[maxn],a[maxn],nn;
bool use[M*];
struct Edge{ int form,to ;}top[M];
void add_edg(int x, int y){
num++;
next[M+num] = G[x];
G[x]=M+num; To[M+num] = y;
next[M-num] = G[y];
G[y] = M-num; To[M-num] =x;
}
void dfs(int u){ while(G[u]){
if(!use[G[u]]){
use[G[u]] = use[M*-G[u]] = true;
int to = To[G[u]];
dfs(To[ G[u] ]);
top[nn++]=(Edge){u,to};
}
G[u]=next[ G[u] ];
}
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==){
memset(d,,sizeof(d));
memset(G,,sizeof(G));
memset(use,false,sizeof(use));
num=nn=;
for(int i=; i<m; i++){
int a,b;
scanf("%d%d",&a,&b);
d[a]++; d[b]++;
add_edg(a,b);
}
int un = ;
for(int i=; i<=n; i++ )
if(d[i]&){
a[un++]=i;
}
int cound=m;
for(int i =; i<un; i+=){
add_edg(a[i],a[i+]);cound++;
}
if(cound&)cound++;
printf("%d\n",cound);
dfs();
for(int i =; i<nn; i++)
if(i&) printf("%d %d\n",top[i].form,top[i].to);
else printf("%d %d\n",top[i].to,top[i].form);
if( (nn&) ) printf("1 1\n");
}
return ;
}
Data Center Drama 欧拉回路的应用的更多相关文章
- 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 ... 
- Codeforces 527E Data Center Drama(欧拉回路)
		题意: 给定一个无向图连通图,把这个的无向边变成有向边,并添加最少的有向边使这个图每个结点的出度为偶数. Solution: 题目很长,并且很多条件说的不太直接,确实不太好懂. 首先先看得到的无向图, ... 
- CF527E Data Center Drama
		链接CF527E Data Center Drama 题目大意:给你一个无向图,要求加最少的边,然后给这些无向图的边定向,使得每一个点的出入度都是偶数. \(n<=10^5,n\leq 2*10 ... 
- 「CF527E」 Data Center Drama
		「CF527E」 Data Center Drama 传送门 显然一个环肯定满足题目条件. 然后我就开始想:先整一棵 \(\texttt{DFS}\) 树,然后非树边从深度深的节点向深度浅的节点连边, ... 
- CF527E Data Center Drama(构造+欧拉回路)
		题目链接 大意: 给你一个无向图. 要求加最少的边,然后给这些无向图的边定向,使得每一个点的出入度都是偶数. 输出定向后的边数和边集. n<=10^5 m<=2*10^5 很巧妙的构造题- ... 
- 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的连接. 连接多个网络供应商来提供冗余可靠 ... 
随机推荐
- 使用 intellijIDEA + gradle构建的项目如何debug
			在intellij IDEA里建立gradle项目(使用jett插件的web项目) 使用intellijIDEA提供的debug无效(无法进入断点) 摸索了一下,通过远程调试的方法来进行调试是可行的 ... 
- 关于javaagent拦截不到File类的问题
			main类: Java code ? 1 2 3 4 public static void main(String[] args) { File file = new File(& ... 
- dhroid - Dhdb orm简化sqlite数据库操作
			android数据库其实使用的不多,dhroid框架中的网络缓存使用了数据库我就写了也写了一个数据库操作工具 dhroid 数据库基本还是单表操作多,为了简单我只做了单表,那些级联,懒加载,什么的分两 ... 
- mysql补充(4)数据完整性
			数据完整性(Data Integrity)是指数据的精确性(Accuracy) 和可靠性(Reliability).(补充mysql数据完整性和约束) 它是应防止数据库中存在不符合语义规定的数据和防止 ... 
- vim配置函数跳转(c/c++)
			暂时草记一下,有时间好好整理 ctags 如果只是查看函数与变量是在哪里定义的,用ctags就可以了. ctrl+]跳到定义的地方,ctrl+t跳回来. 想要像IDE那样在旁边显示函数与变量列表,用t ... 
- vmware下Ubuntu屏幕分辨率设置
			1.查看现有设备 xrandr -q 输出如下: Screen 0: minimum 1 x 1, current 800 x 600, maximum 8192 x 8192 Virtual1 co ... 
- 构建Maven项目时常见错误
			一.Maven项目,右键-update project后JRE system Library变为JavaSE1.6 Dynamic Web Module 3.0 requires Java 1.6 o ... 
- Docker 学习应用篇之一: 初识Docker
			Docker 自从2013年以来就非常的火热,无论是从github上的代码活跃度,还是Redhat在RHE6.5中集成对Docker的支持,等等.第一次接触Docker,还是老师给我们介绍的. 1.初 ... 
- iOS-CoreLocation地理编码(转载)
			一.简单说明 CLGeocoder:地理编码器,其中Geo是地理的英文单词Geography的简写. 1.使用CLGeocoder可以完成“地理编码”和“反地理编码” 地理编码:根据给定的地名,获得具 ... 
- hmm前后向算法
			跟医生就医推导过程是一样的 隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数 隐马尔科夫模型HMM ... 
