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的连接. 连接多个网络供应商来提供冗余可靠 ...
随机推荐
- C语言递归练习
1.炮弹一样的球状物体,能够堆积成一个金字塔,在顶端有一个炮弹,它坐落在一个4个炮弹组成的层面上,而这4个炮弹又坐落在一个9个炮弹组成的层面上,以此类推.写一个递归函数CannonBall,这个函数把 ...
- 理解Buffer
Buffer对象是Node.js用来处理二进制数据的一个接口.JavaScript比较擅长处理Unicode数据,对于处理二进制格式的数据(比如TCP数据流),就不太擅长.Buffer对象就是为了解决 ...
- cocoa 的大招(KVC的几点强大应用记录)
1.利用KVC可以修改系统的只读变量 简单的KVC和我们平常通过一个“类名.属性”赋值一般: teacher.name = @"灭绝师太"; [teacher setValue:@ ...
- 号称简明实用的django上手教程
1 几个基本概念 前置条件:假设读者基本Python语言基础,或者具备某种编程语言的基础.你还熟悉web开发环境,懂些css,js,db等. Django是什么? Django是一个开放源代码的Web ...
- CentOS7.5搭建Solr7.4.0单机服务
一.Solr安装环境 1.官方参考文档 Solr教程参考指南:http://lucene.apache.org/solr/guide/7_4/solr-tutorial.html 2.Solr运行环境 ...
- ZooKeeper (一)概览
注:出于记录对 zookeeper 的学习研究成果目的,并分享经验,根据官方文档翻译整理而成本文,原文地址: http://zookeeper.apache.org/doc/trunk/zookeep ...
- Saltstack之api
Salt-API 1,htps证书 2,配置文件 3,验证.使用PAM验证 4,启动salt-api 安装salt-api yum -y install salt-api 创建用户 useradd - ...
- HUST 1599 - Multiple(动态规划)
1599 - Multiple 时间限制:2秒 内存限制:64兆 461 次提交 111 次通过 题目描述 Rocket323 loves math very much. One day, Rocke ...
- 一个sfm开源项目
Structure from Motion 资料总结 https://blog.csdn.net/u014636245/article/details/77527627 github上用opencv实 ...
- 【太虚AR_v0.1】使用教程 | SLAM(Markerless)
https://blog.csdn.net/VOID_AR/article/details/77715274