POJ 2492 A Bug's Life(并查集)
2014-02-12 09:15
519 查看
http://poj.org/problem?id=2492
题意 :就是给你n条虫子,m对关系,每一对关系的双方都是异性的,让你找出有没有是同性恋的。
思路 :这个题跟POJ1703其实差不多,也是需要一个数组来存跟父亲节点的关系,需要两个集合来存是否有关系,在最后稍微变一下形就OK了。
View Code
题意 :就是给你n条虫子,m对关系,每一对关系的双方都是异性的,让你找出有没有是同性恋的。
思路 :这个题跟POJ1703其实差不多,也是需要一个数组来存跟父亲节点的关系,需要两个集合来存是否有关系,在最后稍微变一下形就OK了。
#include<iostream> #include<string.h> #include<stdio.h> #include<stdlib.h> using namespace std; int pre[100010];//代表着父亲结点,如果D后边是a b,则pre[b]=a ; int father[100010] ;//代表着这个点和父亲结点的关系,是属于同一类还是不同团伙 int m,n ; int find(int x) { int temp = pre[x] ; if (pre[x] == x) return x ; pre[x] = find(pre[x]); father[x] = father[x] == father[temp] ? 0 : 1 ;//等于0表示属于同一类 return pre[x]; } void unionn(int x,int y,int xx,int yy) { pre[xx] = yy ; father[xx] = father[x] == father[y] ? 1 : 0 ; } int main() { int t ; scanf("%d",&t) ; int m,n ,kase = 1; while(t--) { scanf("%d %d",&n,&m) ; for(int i = 1 ; i <= n ; i++) { pre[i]=i; father[i] = 0 ; } bool flag = false ; int a,b ; for(int i = 1 ; i <= m ; i++) { scanf("%d %d",&a,&b) ; int aa = find(a),bb = find(b); if(!flag) { if(aa != bb) unionn(a,b,aa,bb) ; else { if(father[a] == father[b]) flag = true ; } } } printf("Scenario #%d:\n",kase) ; kase++ ; if(flag) printf("Suspicious bugs found!\n\n") ; else printf("No suspicious bugs found!\n\n") ; } return 0; }
View Code
相关文章推荐
- poj 2492 A Bug's Life (并查集)
- POJ---2492 A Bug's Life[并查集]
- poj 2492 A Bug's Life(并查集)
- poj2492_A Bug's Life_并查集
- POJ 2492 A Bug's Life(并查集)
- POJ 2492 A Bug's Life (并查集)
- POJ 2492 A Bug's Life【并查集的简单应用同类的判断】
- POJ 2492 A Bug's Life 并查集的应用
- POJ 2492 A Bug's Life (并查集)
- poj 2492 A Bug's Life (并查集)
- POJ 2492 A Bug's Life 带权并查集
- hdu - 1829 A Bug's Life (并查集)&&poj - 2492 A Bug's Life && poj 1703 Find them, Catch them
- poj2492 A Bug's Life【基础种类并查集】
- POJ 2492 A Bug's Life (并查集)
- poj 2492 A Bug's Life(并查集)
- POJ 2492 A Bug's Life (并查集应用的扩展)
- POJ2492-A Bug's Life-并查集扩展应用
- poj 2492 A Bug's Life 并查集
- POJ 2492 (简单并查集) A Bug's Life
- HDU 1829 & POJ 2492 A Bug's Life (并查集)