hdu1829

题意:教授研究虫子,给出两两虫子的交配关系,问是否有同性恋出现。

 

并查集的应用,定义一个sex的数组,用于记录可以跟这个bug交配的另外一个的bug
用k来记录是否已经出现同性恋。
其实就相当于把输入有关系的两个分到两个集合中,检查给出的两个点是否出现
在同一个的集合中。
354ms代码,感觉用时太多了,但没有深究优化,代码如下

#include<iostream>
int bin[2002],k,sex[2002];
int find(int x)
{
while(x!=bin[x])
x=bin[x];
return x;
}
int merge(int x,int y)
{
int fx,fy;
fx=find(x);
if(sex[y]==0)
sex[y]=x;
fy=find(y);
if(fy==fx)
k=1;
else
{
fy=find(sex[y]);
if(fy!=fx)
{
bin[fx]=fy;
}
}
return 0;
}
int main()
{
int t,n,m,i,x,y,j;
scanf("%d",&t);
j=0;
while(t--)
{
j++;
scanf("%d %d",&n,&m);
k=0;
for(i=1;i<=n;i++)
{
bin[i]=i;
sex[i]=0;
}
for(i=0;i<m;i++)
{
scanf("%d %d",&x,&y);
if(k==0)
merge(x,y);
if(k==0)
merge(y,x);
}
printf("Scenario #%d:\n",j);
if(k==1)
printf("Suspicious bugs found!\n");
else
printf("No suspicious bugs found!\n");
printf("\n");
}
return 0;
}

 

你可能感兴趣的:(记录,同性恋)