Hdu 5348 MZL's endless loop (构造)
来源:互联网 发布:投资 域名 编辑:程序博客网 时间:2024/06/16 01:29
解析:
每找到一个单个的环,将其指定顺序后从图中出,最后会得到一个森林,对于每一棵树,从根节点开始根据出入大小指定方向即可。注意实现细节!
[code]:
#include<cstdio>#include<cstring>#include<algorithm>#include<stack>#include<queue>using namespace std;typedef pair<int,int> P;const int maxn = 1e5+5;const int maxm = 3e5+5;struct Nod{ int b,next,id; void init(int b,int next,int id){ this->b=b;this->next=next;this->id=id; }}buf[2*maxn];int n,m,len,E[maxn],ans[maxm],del[maxm],instack[maxn],used[maxn];int out[maxn],in[maxn];queue<P> G[maxn];void init(){ len = 0; memset(E,-1,(n+1)*sizeof(int)); memset(del,0,m*sizeof(int)); memset(used,0,(n+1)*sizeof(int)); memset(out,0,(n+1)*sizeof(int)); memset(in,0,(n+1)*sizeof(int)); for(int i = 1;i <= n;i++) while(!G[i].empty()) G[i].pop();}void add_edge(int a,int b,int c){ buf[len].init(b,E[a],c);E[a]=len++; buf[len].init(a,E[b],c^1);E[b]=len++;}int findCircle(int u){ int i,v,c; if(instack[u]) return u; instack[u] = 1; while(!G[u].empty()){ P p = G[u].front();G[u].pop(); v = p.first;i = p.second; if(del[i/2]) continue; del[i/2] = 1; c = findCircle(v); if(c != -1&&c != u){ ans[i/2] = i&1; instack[u] = 0; return c; }else if(c == u) ans[i/2] = i&1; else add_edge(u,v,i); } instack[u] = 0; return -1;}void dfs(int u,int pre){ int i,v,id; used[u] = 1; for(i = E[u];i != -1;i = buf[i].next){ v = buf[i].b;id = buf[i].id; if(v == pre) continue; if(out[u]>in[u]) ans[id/2]=1^(id&1),in[u]++,out[v]++; else ans[id/2] = 0^(id&1),out[u]++,in[v]++; dfs(v,u); }}int main(){ int i,j,cas,u,v; scanf("%d",&cas); while(cas--){ scanf("%d%d",&n,&m); init(); for(i = 0;i < m;i++){ scanf("%d%d",&u,&v); G[u].push(P(v,2*i)); G[v].push(P(u,2*i+1)); } for(i = 1;i <= n;i++) findCircle(i); for(i = 1;i <= n;i++){ if(used[i]) continue; dfs(i,-1); } for(i = 0;i < m;i++) printf("%d\n",ans[i]); } return 0;}
0 0
- Hdu 5348 MZL's endless loop (构造)
- hdu 5348 MZL's endless loop
- HDU 5348 MZL's endless loop
- *HDU 5348 - MZL's endless loop(搜索)
- hdu 5348 MZL's endless loop
- hdu 5348 MZL's endless loop 暴搜
- hdu 5348 MZL's endless loop dfs
- hdu 5348 MZL's endless loop(dfs+图论)
- hdu 5348 MZL's endless loop(dfs)
- hdu 5348 MZL's endless loop 欧拉回路
- HDU 5348 MZL's endless loop(DFS+邻接表)
- HDU 5348 MZL's endless loop (dfs+删边)
- HDOJ 5348 MZL's endless loop 乱搞
- HDOJ 5348 MZL's endless loop
- hdu 5348 MZL's endless loop(欧拉路径+欧拉环)
- HDU 5348 MZL's endless loop(思想用的是深搜)经典
- hdu 5348 MZL's endless loop(15多校第五场1006) 欧拉路
- hdu 5348 MZL's endless loop 2015 Multi-University Training Contest 5
- USACO - Dec08 Bad Grass 重庆一中高2018级竞赛班第二次测试 2016.7.13 Problem 1
- ThreadPoolExecutor机制
- XSS攻击原理以及解决办法
- 【华为OJ】数字颠倒
- 素问篇-经络论
- Hdu 5348 MZL's endless loop (构造)
- 编译内核提示mkimage command not found – U-Boot images will not be built
- Ring3下Dll注入方法整理汇总
- jQuery学习笔记之ajax
- 最基础的——windows下命令行操作(本博客将不断更新)
- 如何搭配最新的安卓开发环境
- addEventListener和on的区别
- 零基础学习Linux——ls
- Ubuntu串口问题(2)