-
#include<cstdio>int s[4020];//开两倍空间数组
int find(int x){
return x==s[x]?s[x]:s[x]=find(s[x]);//压缩路径,否则可能会超时
}
void Union(int x,int y){
s[find(x)]=find(y);
}
int main(){
int cnt=1,t;
int m,n;
scanf("%d",&t);
while(t--){
int flag=0;
scanf("%d%d",&n,&m);
for(int i=0;i<=2*n;i++)s[i]=i;
while(m--){
int a,b;
scanf("%d%d",&a,&b);
if(find(a)==find(b))flag=1;
else{
Union(a,b+n);
Union(a+n,b);
}
}
if(flag)printf("Scenario #%d:\nSuspicious bugs found!\n\n",cnt++);
else printf("Scenario #%d:\nNo suspicious bugs found!\n\n",cnt++);
}
}
int find(int x){
return x==s[x]?s[x]:s[x]=find(s[x]);//压缩路径,否则可能会超时
}
void Union(int x,int y){
s[find(x)]=find(y);
}
int main(){
int cnt=1,t;
int m,n;
scanf("%d",&t);
while(t--){
int flag=0;
scanf("%d%d",&n,&m);
for(int i=0;i<=2*n;i++)s[i]=i;
while(m--){
int a,b;
scanf("%d%d",&a,&b);
if(find(a)==find(b))flag=1;
else{
Union(a,b+n);
Union(a+n,b);
}
}
if(flag)printf("Scenario #%d:\nSuspicious bugs found!\n\n",cnt++);
else printf("Scenario #%d:\nNo suspicious bugs found!\n\n",cnt++);
}
}
相关文章
- 01-31POJ 2492种类并查集(给出两种解法)
- 01-31【POJ - 1703】Find them, Catch them(种类并查集)
- 01-31A Bug's Life POJ 2492
- 01-31POJ2492 A Bug's Life
- 01-31poj 2492 A Bug's Life(种类并查集)
- 01-31A Bug's Life(带权并查集)POJ - 2492
- 01-31A Bug‘s Life POJ 2492 加权并查集
- 01-31POJ 1703 Find them, Catch them (种类并查集)
- 01-31并查集 poj1611&poj2492
- 01-31POJ 1182食物链(分集合以及加权两种解法) 种类并查集的经典