#include<stdio.h> int f[2005],rank[2005],flag; int find(int x) { int t; if(x==f[x]) return f[x]; t=find(f[x]); rank[x]=(rank[f[x]]+rank[x])%2; f[x]=t; return f[x]; } void merge(int x,int y) { int a,b; a=find(x); b=find(y); if(a==b) { if(rank[x]==rank[y]) flag=1; return; } f[a]=b; rank[a]=(rank[x]+rank[y]+1)%2; } int main() { int t,i,n,k,a,b; int cas=1; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&k); flag=0; for(i=0;i<=n;i++) { f[i]=i; rank[i]=0; } for(i=0;i<k;i++) { scanf("%d%d",&a,&b); if(flag) continue; merge(a,b); } printf("Scenario #%d:\n",cas++); if(flag) printf("Suspicious bugs found!\n"); else printf("No suspicious bugs found!\n"); printf("\n"); } return 0; }
《并查集》hdu acm 5.1.1
最新推荐文章于 2022-03-11 13:24:49 发布