判断bug中是否有guy。。。。。。。。。。
用n和n+max表示逻辑正反两反面,两个同一集合内的两个都小于max代表有相同,一个小于一个大于代表不同
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=10010;
int pre[2*maxn];
int cnt;
int find(int x)
{
if(pre[x]!=x)
pre[x]=find(pre[x]);
return pre[x];
}
void Union(int x,int y)
{
pre[find(x)]=find(y);
}
int main()
{
int t;
cin>>t;
for(int num=1; num<=t; num++)
{
for(int i=0; i<2*maxn; pre[i++]=i);
int n,flag=1;
cin>>cnt>>n;
while(n--)
{
int a,b;
scanf("%d%d",&a,&b);
if(find(a)==find(b))
flag=0;
else
{
Union(a,b+maxn);
Union(a+maxn,b);
}
}
printf("Scenario #%d:\n",num);
if(flag)
printf("No suspicious bugs found!\n\n");
else
printf("Suspicious bugs found!\n\n");
}
}