Source Code Problem: 2492 User: zhouxc Memory: 416K Time: 1266MS Language: G++ Result: Accepted Source Code #include "iostream" using namespace std; int n,m,x,y,test; int p[2001],rank[2001],opp[2001]; void Make_set() { for(int i=1;i<=n;i++) { p[i]=i; opp[i]=-1; rank[i]=0; } } int Find_set(int a) { if(p[a]!=a) p[a]=Find_set(p[a]); return p[a]; } void Union(int a,int b) { a=Find_set(a); b=Find_set(b); // printf("%d %d/n",a,b); if(rank[a]>rank[b]) p[b]=a; else if(rank[a]<rank[b]) p[a]=b; else { p[b]=a; rank[a]++; } } int main() { int cunt=0; scanf("%d",&test); while(test--) { cunt++; scanf("%d%d",&n,&m); Make_set(); bool flag=true; for(int i=1;i<=m;i++) { scanf("%d%d",&x,&y); if(Find_set(x)==Find_set(y)) flag=false; else { if(opp[x]!=-1) Union(y,opp[x]); if(opp[y]!=-1) Union(x,opp[y]); opp[x]=y; opp[y]=x; } } printf("Scenario #%d:/n",cunt); if(!flag) printf("Suspicious bugs found!/n/n"); else printf("No suspicious bugs found!/n/n"); } return 0; }