#include<iostream>
#include<cstdio>
using namespace std;
const int MAX=2010;
int pre[MAX*2];
void init(int n){
for(int i=1;i<=n;i++)
pre[i]=i;
}
int find(int x){
if(pre[x]==x) return x;
return pre[x]=find(pre[x]);
}
void unite(int x,int y){
x=find(x);
y=find(y);
if(x==y) return;
pre[x]=y;
}
bool same(int x,int y){
return find(x)==find(y);
}
int n,m;
int main(){
int t,ca;
scanf("%d",&t);
for(ca=1;ca<=t;ca++){
scanf("%d%d",&n,&m);
init(n*2);
bool flag=true;
int x,y;
while(m--){
scanf("%d%d",&x,&y);
if(same(x,y))
flag=false;
if(flag){
unite(x,y+n);
unite(x+n,y);
}
}
if(ca>1) printf("\n");
printf("Scenario #%d:\n",ca);
if(flag) printf("No suspicious bugs found!\n");
else printf("Suspicious bugs found!\n");
}
return 0;
}poj2492A Bug's Life
最新推荐文章于 2022-10-28 14:50:42 发布
本文深入探讨了并查集算法的实现原理及其在解决特定问题中的应用。通过一个具体的示例程序,详细介绍了如何使用并查集来判断图中是否存在可疑的bug。此算法能够有效地处理节点间的连接关系,对于理解并查集的基本操作如初始化(init)、查找(find)、合并(unite)等非常有帮助。
347

被折叠的 条评论
为什么被折叠?



