poj 2492 并查集 a bug's life
2012-02-29 22:09
399 查看
题意:给出一些不同种类的昆虫,然后判断给出的关系中是否有矛盾的关系。
思路:带关系类型的并查集,不同种类的昆虫进行合并,同时更新关系。
思路:带关系类型的并查集,不同种类的昆虫进行合并,同时更新关系。
#include<iostream> using namespace std; struct node { int parent; int relation; }p[2010]; int N; void make_set() { for(int i=1;i<=N;i++) { p[i].parent=i; p[i].relation=0; } } int find_set(int x) { if(x==p[x].parent) return x; else { int t=p[x].parent; p[x].parent=find_set(t); p[x].relation=(p[x].relation+p[t].relation)%2; } return p[x].parent; } void join(int x,int y,int d) { int r1,r2; r1=find_set(x); r2=find_set(y); if(r1!=r2) { p[r1].parent=r2; p[r1].relation=(2+p[y].relation-p[x].relation+d)%2; } } int main() { int T,M; int a,b; int h=1; scanf("%d",&T); while(T--) { scanf("%d%d",&N,&M); int flag=true; make_set(); while(M--) { scanf("%d%d",&a,&b); join(a,b,1); if(find_set(a)==find_set(b)) { if(p[a].relation==p[b].relation)//一个集合中(不同种类的集合),如果出现同种类的昆虫,那么就是矛盾的。 flag=false; } } if(flag) { printf("Scenario #%d:\n",h++); printf("No suspicious bugs found!\n\n"); } else { printf("Scenario #%d:\n",h++); printf("Suspicious bugs found!\n\n"); } } }
相关文章推荐
- 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 不是纯裸的并查集
- Hdu 1892&&Poj 2492 A Bug's Life[判断二分图 || 种类并查集]
- POJ 2492--A Bug's Life 【并查集,向量偏移】
- POJ - 2492 A Bug's Life(种类并查集)
- [NWPU][2014][TRN][12]并查集D - A Bug's Life POJ 2492
- poj2492 A Bug's Life(并查集)
- POJ 2492 A Bug's Life(扩展并查集)
- POJ 2492 || HDU 1829: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 && POJ 2492 A Bug's Life(种类并查集)