一个科学家准备了一些虫子,把两个能够在一起的虫子放在一起,有异性恋,当然,还有同性恋。
问你,这些虫子中是否有同性恋。
这个用并查集的方法,只是在判断的时候稍麻烦一些...
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int father[2005];
int a[2005];
int find(int tar)
{
int result=tar;
while(result!=father[result])
{
result=father[result];
}
return result;
}
void Union(int a,int b)
{
int rx=find(a);
int ry=find(b);
if(rx!=ry)
father[rx]=ry;
}
int main()
{
int nn,cc=0;
//cin>>n;
scanf("%d",&nn);
while(nn--)
{
cc++;
int m,n,x,y;
//cin>>m>>n;
scanf("%d%d",&m,&n);
for(int i=1;i<=m;i++)
father[i]=i;
memset(a,-1,sizeof(a));
bool flag=false;
for(int i=0;i<n;i++)
{
//cin>>x>>y;
scanf("%d%d",&x,&y);
if(flag) continue;
if(a[x]==-1)
{
if(a[y]!=-1)
Union(x,a[y]);
a[x]=y;
a[y]=x;
}
else{
if(a[y]==-1)
{
Union(y,a[x]);
a[x]=y;
a[y]=x;
}
else
{
if(find(x)==find(y))
{
flag=true;
continue;
}
else
{
Union(x,a[y]);
Union(y,a[x]);
}
}
}
}
if(flag)
cout<<"Scenario #"<<cc<<":"<<endl
<<"Suspicious bugs found!"<<endl;
else
cout<<"Scenario #"<<cc<<":"<<endl
<<"No suspicious bugs found!"<<endl;
cout<<endl;
}
return 0;
}