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