[欧拉回路] 51NOD1967. 路径定向
来源:互联网 发布:电脑pe手动备份数据 编辑:程序博客网 时间:2024/06/01 10:47
记一道模板题
首先入度等于出度,很显然是欧拉回路的性质
奇数点的话两两连边就行了…
做完后想起来Manchery讲过…
#include <cstdio>#include <iostream>#include <algorithm>using namespace std;const int N=100010;int n,m,cnt=1,du[N],ans[N*10],G[N];struct edge{ int t,nx,g,w;}E[N*10];inline void addedge(int x,int y,int w){ E[++cnt].t=y; E[cnt].nx=G[x]; G[x]=cnt; E[cnt].g=w; E[cnt].w=0; du[x]++; E[++cnt].t=x; E[cnt].nx=G[y]; G[y]=cnt; E[cnt].g=w; E[cnt].w=1; du[y]++;}int fa[N*10];int Gfat(int x){ return x==fa[x]?x:fa[x]=Gfat(fa[x]);}int Q[N],t,vis[N];void dfs(int x){ vis[x]=1; for(int i=Gfat(G[x]);i;i=Gfat(E[i].nx)){ fa[i]=E[i].nx; fa[i^1]=E[i^1].nx; dfs(E[i].t); ans[E[i^1].g]=E[i^1].w; }}int main(){ freopen("1.in","r",stdin); freopen("1.out","w",stdout); scanf("%d%d",&n,&m); for(int i=1,x,y;i<=m;i++) scanf("%d%d",&x,&y),addedge(x,y,i); int lst=0,c=0; for(int i=1;i<=n;i++) if(du[i]&1) lst?(addedge(lst,i,0),lst=0):lst=i; else c++; for(int i=2;i<=cnt;i++) fa[i]=i; for(int i=1;i<=n;i++) if(!vis[i]) dfs(i); printf("%d\n",c); for(int i=1;i<=m;i++) putchar(ans[i]+'0'); return 0;}
阅读全文
0 0
- [欧拉回路] 51NOD1967. 路径定向
- 欧拉回路+无极卡常——51nod1967 路径定向
- 【51Nod1967】路径定向
- 51nod1967 路径定向 Flenry
- [欧拉回路]51 Nod 1967——路径定向
- 【51Nod】1967 路径定向 欧拉回路
- 欧拉路径/回路
- 欧拉回路路径求解
- 欧拉回路+路径 POJ
- 欧拉回路/路径【总结】
- 欧拉回路以及欧拉路径
- 欧拉路径&&欧拉回路
- 欧拉回路、欧拉路径
- 欧拉路径与欧拉回路
- hdu5348(欧拉回路+欧拉路径)
- 欧拉路径/欧拉回路
- 欧拉回路(欧拉路径)
- 欧拉路径-欧拉回路
- 在FPGA的ROMIP核中导入由txt建立的coe数据文件并仿真
- 【 Tomcat 】tomcat8.0 基本参数调优配置
- 编译ARToolKit遇到的几个问题
- nodejs elasticsearch基础使用
- 用Java实现约瑟夫问题
- [欧拉回路] 51NOD1967. 路径定向
- ios高级动画的简单实现
- 梯度爆炸分析
- 数据结构实验之查找七:线性之哈希表
- lamp
- 在线英英词典
- Nepire的校OJ入门题解—17蓝桥选拔篇(七)
- 创业公司的抗争,共享单车的合并
- Linux服务器上新增开放端口号