hihocoder1121 二分图一•二分图判定
2017-06-03 21:12
232 查看
染色(模拟)
题目传送门图的染色(就是二分图判定的方法),思路题目上直接有就不讲了。
注意可能有多个联通分量。
贴上交了8遍才过的代码(还是8遍):
#include<cstdio> #include<cstring> #include<algorithm> #define MAXN 10000 using namespace std; struct edge{ int to; int next; }; int k,t,n,m,u,v,r,w; edge a[MAXN*8+5]; int h[MAXN+5]; int f[MAXN+5]; int b[MAXN*10+5]; bool pd; void read(int x,int y) { k++; a[k].next=h[x]; a[k].to=y; h[x]=k; } void doit(int j) { b[1]=j; f[j]=1; r=0; w=1; int x; while (r<w) { x=b[++r]; if (f[x]==1) for (int i=h[x];i!=0;i=a[i].next) { if (!f[a[i].to]) { f[a[i].to]=2; b[++w]=a[i].to; } else if (f[a[i].to]==1) { printf("Wrong\n"); pd=true; return; } } else for (int i=h[x];i!=0;i=a[i].next) { if (!f[a[i].to]) { f[a[i].to]=1; b[++w]=a[i].to; } else if (f[a[i].to]==2) { printf("Wrong\n"); pd=true; return; } } } } int main() { scanf("%d",&t); while (t--) { memset(h,0,sizeof(h)); memset(f,0,sizeof(f)); k=0; pd=false; scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) { scanf("%d%d",&u,&v); read(u,v); read(v,u); } for (int j=1;j<=n;j++) { if (!f[j]) doit(j); if (pd) break; } if (pd==false) printf("Correct\n"); } return 0; }
相关文章推荐
- hihoCoder 1121 二分图一•二分图判定
- HihoCoder 1121二分图一•二分图判定
- HihoCoder 1121 二分图一•二分图判定
- hihocoder 1121 : 二分图一•二分图判定
- hihocoder 第三十三周 二分图一•二分图判定
- [HihoCoder]#1121 : 二分图一•二分图判定
- hihoCoder 1322:树结构判定
- hihoCoder - 1121 - 二分图判定
- 二分图一•二分图判定
- hihoCoder #1121 : 二分图一•二分图判定
- hihoCoder 树结构判定(并查集)
- hihocoder #1121 : 二分图一•二分图判定
- hihoCoder 1121 二分图判定
- 【hihocoder1291 微软2016校园招聘4月在线笔试D】【逆序思维 并查集】Buiding in Sandbox 我的世界建方块合法性判定
- [hihocoder1322] 树结构判定
- 二分图判定 水题 Hihocoder 1121
- Hihocoder #1121 二分图一•二分图判定( bfs或者dfs搜索实现 搜索的过程中进行 节点标记 *【模板】)
- #1121 : 二分图一•二分图判定
- hihoCoder 1121 二部图判定
- hihoCoder - 1176 - 欧拉路·一 (欧拉路的判定)