POJ 2492 二分图判断 并查集
来源:互联网 发布:达内培训 南京java 编辑:程序博客网 时间:2024/06/05 08:29
POJ - 2492
题意:给出N个BUG 和 M个BUG的性关系 判断是否有同性关系
可以用二分图判断来做 也可以用并查集来做 明天补上并查集
二分图:
如果这N个BUG间只有异性间有关系 那么对这N个BUG做一个关系图 同性之间的BUG之间没有联系 联系建立在不同的性别之间 可以将点集分成两个类别 A B 集合内部没有联系 则这个图为二分图
于是使用二分图判断的常用方法,图染色法 两种颜色将图 可以将相邻点染不同色 则为二分图 用DFS来判断是否为二分图
有一个坑点:这个图可能是由若干个二分图构成的图 所有要对每个联通图进行判断
代码如下:
#include <cstdio>#include <iostream>#include <cstring>#define sf scanf#define pf printfusing namespace std;const int maxn = 2000 + 5;int color[maxn];bool Adj[maxn][maxn];int n,m;bool DFS(int cur){ for(int i = 1;i <= n;++i){ if(Adj[i][cur]){ if(color[i] == color[cur]){ return false; } if(color[i] == -1){ color[i] = color[cur] == 0 ? 1 : 0; if( DFS(i) == false ) return false; } } } return true;}int main(){ int T;sf("%d",&T); int ca = 0; while(T--){ sf("%d%d",&n,&m); memset(Adj,0,sizeof(Adj)); for(int i = 0;i < m;++i){ int u,v;sf("%d%d",&u,&v); Adj[u][v] = Adj[v][u] = 1; } memset(color,-1,sizeof(color)); bool ans = true; for(int i = 1;i <= n;++i){ if(color[i] == -1){ color[i] = 0; ans = DFS(i); } if(!ans) break; } pf("Scenario #%d:\n",++ca); if(ans){ pf("No suspicious bugs found!\n"); } else pf("Suspicious bugs found!\n"); if(T) pf("\n"); } return 0;}
0 0
- POJ 2492 二分图判断 并查集
- Hdu 1892&&Poj 2492 A Bug's Life[判断二分图 || 种类并查集]
- POJ 2492 A Bug's Life (高级并查集||带权并查集 ||二分图的判断+二维vector)
- hdu 1829 &poj 2492 A Bug's Life(判断二分图、带权并查集)
- POJ 2253 Frogger(并查集+二分)
- HDU1829&POJ 2492 a bug's life [并查集||二分图染色]
- poj 2492 A Bug's Life(并查集 染色法 二分图)
- poj 1308 并查集判断“树”
- POJ 1308(并查集判断树)
- POJ 2492 并查集
- POJ - 2492 并查集
- POJ 2492 (并查集)
- poj 2492(并查集)
- POJ 2492 并查集
- poj 2492(并查集)
- 【并查集】poj 2492
- POJ 2263 Heavy Cargo(二分+并查集)
- POJ-2985(树状数组 + 并查集 + 二分)
- 判断链表是否有环
- poj1521 求赫夫曼编码长度
- HDU Problem 2199 Can you solve this equation? 【二分】
- hdu 2553 N皇后问题 (DFS)
- HDU 4027:Can you answer these queries?
- POJ 2492 二分图判断 并查集
- HDU 1702
- unix进程通信方式总结(上)
- python(五) 对数组排序
- SwitchButton 的使用汇总 —— 定制漂亮的开关控件
- 用Mac终端编写,编译C程序的实例
- JAVA学习随笔(6)--FileInputStream随笔
- HDOJ-----2141二分
- 冒泡排序、选择排序、插入排序代码