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的连接. 连接多个网络供应商来提供冗余可靠 ...
随机推荐
- 使用正则表达式来截取nginx中的内置变量
nginx 中的内置变量都可以通过 if 指令 + 正则表达式来进行截取,截取之后的结果通过正则表达式的分组来进行引用 比如:从请求中传过来的一个名为 ssl_client_s_dn 的变量,它的值是 ...
- memcached stats 命令
STAT pid 1552 STAT uptime 3792 STAT time 1262517674 STAT version 1.2.6 STAT pointer_size 32 STAT cur ...
- HTML5 Canvas 画纸飞机组件
纸飞机模拟一个物体在规定设计轴线偏离方位. //三角形 function DrawTriangle(canvas, A, B, C) { //画个三角形,“A.B.C”是顶点 with (canvas ...
- CentOS 6.8下更改Apache默认网站安装目录
首先,当我们搭建好LAMP环境后,Apache服务器默认的网站安装目录是/var/www/html 然而我们搭建项目时为了方便,我们是按照自己的意愿更改网站目录的 现在假设,按照意愿设定的网站目录为/ ...
- http后台json解析实例
localhost:8080/hbinterface/orderInterface/sIReverseAccept.do?bizType=4&&bnetAccount=ESBTEST2 ...
- pandas常用
#python中的pandas库主要有DataFrame和Series类(面向对象的的语言更愿意叫类) DataFrame也就是#数据框(主要是借鉴R里面的data.frame),Series也就是序 ...
- 在 CSS 中,width 和 height 指的是内容区域的宽度和高度
增加内边距.边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸. 改变宽度就可以,去掉
- Saltstack之api
Salt-API 1,htps证书 2,配置文件 3,验证.使用PAM验证 4,启动salt-api 安装salt-api yum -y install salt-api 创建用户 useradd - ...
- BZOJ2200 道路和航线【好题】【dfs】【最短路】【缩点】
2200: [Usaco2011 Jan]道路和航线 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1384 Solved: 508[Submit] ...
- hihocoder 1322 - 树结构判定 - [hiho一下161周][模板题/水题]
题目链接:http://hihocoder.com/problemset/problem/1322 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个包含 N 个顶 ...