想看更多的解题报告: http://blog.csdn.net/wangjian8006/article/details/7870410
转载请注明出处:http://blog.csdn.net/wangjian8006
题目大意:给出N条虫子,然后a和b交配,给出M对a和b后问
有没有同性恋的虫子(题目意思太BT了)
具体参考poj1703
http://blog.csdn.net/wangjian8006/article/details/7846279
在poj1703做的处理就是每得到一对虫子就判断下他们是否在同一个集合,并且他们的性别是否相同,如果相同则有同性恋,后面就算输入数据也不用做处理了,否则就一直处理下去
/*
Memory 144K
Time 750MS
*/
#include <stdio.h>
#define MAXV 2010
int flag,m,n,ans[MAXV],tree[MAXV];
void init(){
int i;
for(i=1;i<=n;i++){
ans[i]=0;
tree[i]=i;
}
flag=1;
}
int find(int x){
int rt;
if(x!=tree[x]){
rt=find(tree[x]);
ans[x]=ans[x]^ans[tree[x]];
return tree[x]=rt;
}
return x;
}
void TUnion(int x,int y){
int fx,fy;
fx=find(x);
fy=find(y);
if(fx==fy)
flag=ans[x]^ans[y];
else{
tree[fx]=fy;
ans[fx]=~(ans[x]^ans[y]);
}
}
int main(){
int i,j,t,a,b;
scanf("%d",&t);
for(j=1;j<=t;j++){
scanf("%d%d",&n,&m);
init();
for(i=1;i<=m;i++){
scanf("%d%d",&a,&b);
if(flag){
TUnion(a,b);
}
}
printf("Scenario #%d:\n",j);
if(flag)
printf("No suspicious bugs found!\n\n");
else
printf("Suspicious bugs found!\n\n");
}
return 0;
}