这是一道并查集的问题,起初以为和以前那种求图中有无回路的问题。但是做了之后提交是WA 好吧,看了别人的解题报告后就做了。
题目的一是在给定的数据中判断有n个人,给你m对关系,问有没有同性恋的。
#include<stdio.h>
int arr[2005];
int set[2005];
int findx(int x)
{
int t;
if(arr[x]==x)
return x;
t=arr[x];
arr[x]=findx(arr[x]);
set[x]=(set[x]+set[t]+2)%2;
return arr[x];
}
void merge(int x, int y)
{
int fx=findx(x);
int fy=findx(y);
arr[fx]=fy;
set[fx]=(set[y]-set[x]+1+2)%2;
}
int main()
{
int n,a,b,x,y,k,i,flag;
scanf("%d",&n);
for(k=1;k<=n;k++)
{
scanf("%d%d",&a,&b);
for(i=1;i<=a;i++)
{
arr[i]=i;
set[i]=0;
}
flag=0;
for(i=1;i<=b;i++)
{
scanf("%d%d",&x,&y);
if(findx(x)==findx(y))
{
if(set[x]==set[y])
flag=1;
}
else
merge(x,y);
}
printf("Scenario #%d:\n",k);
if(flag)
printf("Suspicious bugs found!\n");
else
printf("No suspicious bugs found!\n");
printf("\n");
}
return 0;
}