第一次写欧拉回路,实际上只要dfs下去就可以了,反正每条边都是要遍历一遍的……

  关键有两个性质:1.一个无向图存在欧拉回路,当且仅当该图所有顶点度数都为偶数,且该图是连通图。2.一个有向图存在欧拉回路,所有顶点的入度等于出度且该图是连通图。

  所以我们可以将所有的奇点之间两两连边使得它们成为偶点。此时这张图上必然存在欧拉路径,也就是所有顶点的入度等于出度,我们只需要减去奇点即可。

#include <bits/stdc++.h>
using namespace std;
#define maxn 1000000
int n, m, tot, cnt;
int e[maxn], rec[maxn], degree[maxn]; int read()
{
int x = , k = ;
char c;
c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} struct edge
{
int cnp, to[maxn], last[maxn], head[maxn], id[maxn], mark[maxn];
edge() { cnp = ; }
void add(int u, int v)
{
to[cnp] = v, id[cnp] = , last[cnp] = head[u], head[u] = cnp ++;
to[cnp] = u, id[cnp] = , last[cnp] = head[v], head[v] = cnp ++;
}
}E1; void dfs(int u)
{
for(int i = E1.head[u]; i; i = E1.last[i])
{
if(E1.mark[i]) continue;
int v = E1.to[i];
if(E1.id[i]) E1.mark[i] = E1.mark[i ^ ] = ;
else E1.mark[i] = E1.mark[i ^ ] = ;
dfs(v);
}
} int main()
{
n = read(), m = read();
for(int i = ; i <= m; i ++)
{
int x = read(), y = read();
degree[x] ++, degree[y] ++; E1.add(x, y);
}
for(int i = ; i <= n; i ++)
if(degree[i] & ) e[++ cnt] = i;
int M = E1.cnp;
for(int i = ; i <= cnt; i += )
{
int x = e[i], y = e[i + ];
E1.add(x, y);
}
for(int i = ; i <= n; i ++) dfs(i);
printf("%d\n", n - cnt);
for(int i = ; i < M; i += )
if(E1.mark[i] == ) putchar('');
else putchar('');
return ;
}

【题解】51nod1967 路径定向的更多相关文章

  1. 51nod1967 路径定向 Fleury

    题目传送门 题解 几乎是Fleury模板题. 一开始我们把图看作无向图,然后对于度为奇数的点增边,使得整个图的所有点都是偶数的. 然后跑一遍欧拉回路 Fleury ,所有的边就定向好了~ 代码 #in ...

  2. 51nod1967 路径定向(欧拉回路+结论题)

    看到入度等于出度想到欧拉回路. 我们把边都变成无向边,有一个结论是偶数度的点都可以变成出入度相等的点,而奇数点的不行,感性理解分类讨论一下就知道是对的. 还有一个更好理解的结论是变成无向边后奇数点的个 ...

  3. 51nod 1967路径定向(dfs、欧拉回路)

    1967 路径定向 基准时间限制:1.2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 给出一个有向图,要求给每条边重定向,使得定向后出度等于入度的点最多,输出答案和任意一种方案 ...

  4. 51nod 1967 路径定向(不错的欧拉回路)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1967 题意: 思路: 出度=入度,这很容易想到欧拉回路,事实上,这道题目 ...

  5. 51Nod 1967 路径定向 —— 欧拉回路

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1967 显然是欧拉回路问题,度数为奇数的点之间连边,跑欧拉回路就可以 ...

  6. 51nod 1967路径定向(欧拉回路)

    题目大意:给出一个图,安排边的方向,使得入度等于出度的点数最多,并给出方案. 首先假设是个无向图,不妨认定偶点必定可以满足条件 我们还会发现,奇点的个数必定是偶数个 那么如果把奇点两两用辅助边连起来, ...

  7. 51nod 1967 路径定向——欧拉回路

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1967 一共只会有偶数个奇数度的点.因为每多一条边,总度数加2. 把 ...

  8. 51nod图论题解(4级,5级算法题)

    51nod图论题解(4级,5级算法题) 1805 小树 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 她发现她的树的点上都有一个标号(从1到n),这些树都在空 ...

  9. Wannafly挑战赛29题解

    这套题目非常有意思啊23333--话说为啥没有上条先生的呢-- 传送门 \(A\) 御坂美琴 蠢了--首先先判总共加起来等不等于\(n\),不是的话就不行 然后dfs记录\(n\)不断分下去能分成哪些 ...

随机推荐

  1. Shr-前端汇总

    F7控件监听 f7控件的监听是指,在点击F7控件时,对控件内的内容进行选中后出发该事件监听:通过参数value可以获取当前F7控件的一些值信息. //人力编制方案监听 回写计划期间 及分录数据 ini ...

  2. Fat Jar - Myeclipse插件安装使用方法- 完美解决

    Eclipse可以安装一个叫Fat Jar的插件,用这个插件打包非常方便,Fat Jar的功能非常强大. 工具/原料 Eclipse Kepler Fat Jar 方法/步骤 1 Fat Jar功能非 ...

  3. Odd CSS syntax. [class^='icon-'], [class*=' icon-']

    原文: https://stackoverflow.com/questions/20322740/odd-css-syntax-class-icon-class-icon I am going thr ...

  4. C#原型模式

    如下: [Serializable] public class ModelNewTable : ICloneable { public object Clone() { using (var stre ...

  5. hdu1203I NEED A OFFER!(01背包)

    I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  6. 怎样下载Firefox与Chrome浏览器驱动

    在浏览器地址栏输入https://www.seleniumhq.org/ 打开Selenium官网 下载Firefox浏览器驱动 解压到本地 下载Chrome浏览器驱动 解压到本地 把这2个驱动放到P ...

  7. 学习笔记,99乘法表,嵌套while循环

    line = 0 #定义外循环初变量 while line < 9: #外循环判断语句 line += 1 #改变外循环初变量,避免陷入死循环 row = 0 #定义内循环初变量 while r ...

  8. ionic 日期插件学习

    <ion-header> <ion-navbar> <ion-title> DateTime </ion-title> </ion-navbar& ...

  9. 水仙花数---基于python

    # coding:utf-8"""水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153) ...

  10. SGU 438 The Glorious Karlutka River =)(最大流)

    Description A group of Mtourists are walking along the Karlutka river. They want to cross the river, ...