题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66964#problem/J
题意:就是输入两个数,判断这两个数是不是同一个性别。
思路:和食物链问题一个思路,而且和食物链相比,只有两个类需要维护,所以简单了许多。
食物链题解:http://blog.csdn.net/i_am_a_winer/article/details/45173659
代码:
#include<iostream>
#include<cstdio>
using namespace std;
int N,M,pre[4010];
int find(int x){
int t=x;
while(t!=pre[t]) t=pre[t];
while(x!=t) pre[x]=t,x=pre[x];
return t;
}
int main(){
//freopen("D:\\in.txt","r",stdin);
int T;cin>>T;
for(int kase=1;kase<=T;kase++){
cin>>N>>M;
for(int i=0;i<=2*N;i++) pre[i]=i;
int a,b,op=1;
for(int i=0;i<M;i++){
scanf("%d %d",&a,&b);
int fa=find(a),fb=find(b);
if(fa==fb) op=0;
if(op) pre[fa]=find(b+N),pre[find(a+N)]=fb;
}
printf("Scenario #%d:\n",kase);
if(!op) printf("Suspicious bugs found!\n");
else printf("No suspicious bugs found!\n");
cout<<endl;//也许这里得注意
}
return 0;
}