看到入度等于出度想到欧拉回路。

  我们把边都变成无向边,有一个结论是偶数度的点都可以变成出入度相等的点,而奇数点的不行,感性理解分类讨论一下就知道是对的。

  还有一个更好理解的结论是变成无向边后奇数点的个数一定只有偶数个,因为有一个奇数点就一定有另一个跟他对应。

  那么我们把奇数点凑成对连边,这样奇数点也变成了偶数点。无向图中所有的点的度数为偶数就存在欧拉回路,于是我们就可以跑一遍欧拉回路途中判断边是否需要返向来得到方案。

  卡常题T T(其实是我写太丑

#include<stdio.h>
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
const int maxn=;
struct poi{int x,too,pre,pos;}e[maxn<<];
int n,m,x,y,cnt,tot,cntt;
int d[maxn],p[maxn],last[maxn],flag[maxn<<],v[maxn];
char buf[],*ptr=buf-;
inline int read()
{
char c=*++ptr;int s=,t=;
while(c<||c>)c=*++ptr;
while(c>=&&c<=){s=s*+c-'';c=*++ptr;}
return s*t;
}
inline void add(int x,int y,int z,int from){e[++tot].x=from;e[tot].too=y;e[tot].pos=z;e[tot].pre=last[x];last[x]=tot;}
void dfs(int x)
{
v[x]=;
for(register int i=last[x];i;last[x]=i=e[i].pre)
if(!flag[e[i].pos])
{
if(e[i].x==x)flag[e[i].pos]=;
else flag[e[i].pos]=;
dfs(e[i].too);
}
}
int main()
{
fread(buf,,sizeof(buf),stdin);
n=read();m=read();
for(register int i=;i<=m;++i)
{
x=read();y=read();
if(x==y)continue;
add(x,y,i,x);add(y,x,i,x);
d[x]++;d[y]++;
}
for(register int i=;i<=n;++i)if(d[i]&)p[++cnt]=i;
for(register int i=;i<=cnt;i+=)add(p[i],p[i+],(i>>)+m+,p[i]),add(p[i+],p[i],(i>>)+m+,p[i]);
for(register int i=;i<=n;++i)if(!v[i])dfs(i);
printf("%d\n",n-cnt);
for(int i=;i<=m;i++)if(flag[i]==)putchar('');else putchar('');
}

51nod1967 路径定向(欧拉回路+结论题)的更多相关文章

  1. 51nod1967 路径定向 Fleury

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

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

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

  3. 【题解】51nod1967 路径定向

    第一次写欧拉回路,实际上只要dfs下去就可以了,反正每条边都是要遍历一遍的…… 关键有两个性质:1.一个无向图存在欧拉回路,当且仅当该图所有顶点度数都为偶数,且该图是连通图.2.一个有向图存在欧拉回路 ...

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

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

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

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

  6. 【bzoj3997】[TJOI2015]组合数学 Dilworth定理结论题+dp

    题目描述 给出一个网格图,其中某些格子有财宝,每次从左上角出发,只能向下或右走.问至少走多少次才能将财宝捡完.此对此问题变形,假设每个格子中有好多财宝,而每一次经过一个格子至多只能捡走一块财宝,至少走 ...

  7. [codevs5578][咸鱼]tarjan/结论题

    5578 咸鱼  时间限制: 1 s  空间限制: 128000 KB   题目描述 Description 在广袤的正方形土地上有n条水平的河流和m条垂直的河流,发达的咸鱼家族在m*n个河流交叉点都 ...

  8. BZOJ_1367_[Baltic2004]sequence_结论题+可并堆

    BZOJ_1367_[Baltic2004]sequence_结论题+可并堆 Description Input Output 一个整数R Sample Input 7 9 4 8 20 14 15 ...

  9. [BZOJ3609][Heoi2014]人人尽说江南好 结论题

    Description 小 Z 是一个不折不扣的 ZRP(Zealot Round-game Player,回合制游戏狂热玩家), 最近他 想起了小时候在江南玩过的一个游戏.     在过去,人们是要 ...

随机推荐

  1. 【Jmeter测试】使用Java请求进行Dubbo接口的测试

    如何构建一个Dubbo接口测试的通用框架(https://github.com/nitibu/jmeter-dubbo-test)​从上面的流程我们可以看出,测试类大致的一个结构: 使用json文件来 ...

  2. Python接口测试实战5(下) - RESTful、Web Service及Mock Server

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  3. linux 下 python 安装 Django

    安装 setuptools 使用easy_install命令 easy_install django

  4. java学习笔记-01.对象入门

    1.面向对象编程简称是OOP. 2.继承是通过 extends关键字实现的,接口是通过implements关键字实现的. 3.public:意味着后续的定义任何人均可使用. private:意味着除了 ...

  5. HTML5+Bootstrap 学习笔记 2

    navbar升级 从Bootstrap 2到Bootstrap 3 1. .navbar-inner已从Bootstrap 3中去除. 2. <ul class="nav"& ...

  6. MD5加密字符串--基于python

    import hashlib#md5加密32位def md5(str): import hashlib m = hashlib.md5() m.update(str) return m.hexdige ...

  7. $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 区别

    PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 的区别 PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 通常情况下,PHP ...

  8. scrum立会报告+燃尽图(第三周第五次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2286 项目地址:https://coding.net/u/wuyy694 ...

  9. CodeForces 483B 二分答案

    题目: B. Friends and Presents time limit per test 1 second memory limit per test 256 megabytes input s ...

  10. 关于window.open弹出窗口被阻止的问题

    原文:http://blog.csdn.net/fanfanjin/article/details/6858168 在web编程过程中,经常会遇到一些页面需要弹出窗口,但是在服务器端用window.o ...