题意:给你n点m边的图,然后让你确定每条边的方向,使得入度=出度的点最多 。

度数为偶数的点均能满足入度 = 出度。

证明:度数为奇数的点有偶数个,奇度点两两配对连无向边,则新图存在欧拉回路,则可使新图所有点入度 = 出度。

 #include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
typedef long long ll;
const int N = ;
int d[N], head[N], tot;
int to[N*N], nex[N*N], vis[N*N];
vector< pair<int, int> > ans;
void init(){
tot = ;
memset(d, , sizeof(d));
memset(head, -, sizeof(head));
ans.clear();
}
void add(int u, int v, int w){// w = 0, exit; w = -1, add
d[v]++;
to[tot] = v;
nex[tot] = head[u];
vis[tot] = w;
head[u] = tot++;
}
void dfs(int x){
for(int& i = head[x]; ~i; ){
if(vis[i] == ) {
i = nex[i];
continue ;
}
if(vis[i] == ) ans.push_back( make_pair(x, to[i]) );
vis[i] = vis[i^] = ;
dfs(to[i]);
}
} int main(){
int t; scanf("%d", &t);
while(t--){
init();
int n, m, u, v;
scanf("%d%d", &n, &m);
for(int i = ; i < m; i++){
scanf("%d%d", &u, &v);
add(u, v, );
add(v, u, );
}
vector<int> tmp;
int ret = n;
for(int i = ; i <= n; i++)
if(d[i]&) tmp.push_back(i), ret--;
for(int i = ; i < tmp.size(); i += ){
add(tmp[i], tmp[i+], -);
add(tmp[i+], tmp[i], -);
}
for(int i = ; i <= n; i++)
dfs(i);
printf("%d\n", ret);
for(int i = ; i < ans.size(); i++)
printf("%d %d\n", ans[i].X, ans[i].Y);
}
return ;
}

Codeforces723E One-Way Reform【欧拉回路】的更多相关文章

  1. codeforces 723E (欧拉回路)

    Problem One-Way Reform 题目大意 给一张n个点,m条边的无向图,要求给每条边定一个方向,使得最多的点入度等于出度,要求输出方案. 解题分析 最多点的数量就是入度为偶数的点. 将入 ...

  2. URAL 1137 Bus Routes(欧拉回路路径)

    1137. Bus Routes Time limit: 1.0 secondMemory limit: 64 MB Several bus routes were in the city of Fi ...

  3. One-Way Reform

    One-Way Reform time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  4. ACM/ICPC 之 混合图的欧拉回路判定-网络流(POJ1637)

    //网络流判定混合图欧拉回路 //通过网络流使得各点的出入度相同则possible,否则impossible //残留网络的权值为可改变方向的次数,即n个双向边则有n次 //Time:157Ms Me ...

  5. [poj2337]求字典序最小欧拉回路

    注意:找出一条欧拉回路,与判定这个图能不能一笔联通...是不同的概念 c++奇怪的编译规则...生不如死啊... string怎么用啊...cincout来救? 可以直接.length()我也是长见识 ...

  6. ACM: FZU 2112 Tickets - 欧拉回路 - 并查集

     FZU 2112 Tickets Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u P ...

  7. UVA 10054 the necklace 欧拉回路

    有n个珠子,每颗珠子有左右两边两种颜色,颜色有1~50种,问你能不能把这些珠子按照相接的地方颜色相同串成一个环. 可以认为有50个点,用n条边它们相连,问你能不能找出包含所有边的欧拉回路 首先判断是否 ...

  8. POJ 1637 混合图的欧拉回路判定

    题意:一张混合图,判断是否存在欧拉回路. 分析参考: 混合图(既有有向边又有无向边的图)中欧拉环.欧拉路径的判定需要借助网络流! (1)欧拉环的判定:一开始当然是判断原图的基图是否连通,若不连通则一定 ...

  9. UVa 12118 检查员的难题(dfs+欧拉回路)

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

随机推荐

  1. 怎么使用PHP获取用户客户端真实IP的解决方案呢?

    function getIp(){if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIE ...

  2. svn搭建以及可能遇到的问题解决方案

    Svn服务器的安装和配置 1.安装svn服务器端软件从镜像服务器或者YUM源下载安装SVN服务器软件:yum install subversion mkdir /usr/local/svn //创建S ...

  3. 收集 关于php的博文

    1. 小狼的世界: 浅谈用php实现mvc:http://www.cnblogs.com/cocowool/archive/2009/09/08/1562874.html 关于MVC的定义和解释,可以 ...

  4. 【转】【Android】开源项目汇总-备用

    第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...

  5. jqeury之轮播图

    $(document).ready(function(){ var sWidth = $('#pic1').width(); var len = $('#pic1 .sildebar li').len ...

  6. discuz安装与学习资料

    discuz的安装地址:http://www.discuz.net/thread-3457145-1-1.html 一些学习资料:http://www.discuz.net/forum-10-1.ht ...

  7. 邮箱性质--全选单选的操作和传值 用属性的name传值

    封装类 using System; using System.Collections.Generic; using System.Web; /// <summary> /// Ha 的摘要 ...

  8. react学习

    http://www.cnblogs.com/yunfeifei/ http://wiki.jikexueyuan.com/project/react-native/native-ui-compone ...

  9. 我的android学习经历14

    LinearLayout线性布局中gravity和Layout_gravity的解释 这两个都是说明对齐方式的.‘ gravity说明的是子控件的对齐方式,比如把gravity写在LinearLayo ...

  10. block 实现原理详解(一)

    对于大多数人来讲,block内部到底是怎样实现的呢?我们可以借助clang将其编译成为c++的代码,就可以看出,block到底是什么东西, 先来看这样一个问题, <!-- lang: cpp - ...