hdu1829并查集基础
#include<stdio.h> #include<iostream> using namespace std; #define maxn 2005 int f[maxn], l[maxn]; int find(int x) { return x-f[x] ? f[x]=find(f[x]) : x ; } int merge(int u, int v) { int pu=find(u); int pv=find(v); if(pu!=pv) { if(l[u]==u) l[u]=v; if(l[v]==v) l[v]=u; f[find(l[u])]=pv; f[find(l[v])]=pu; return 0; } return 1; } int main() { int n,m,u,v,flag,t; scanf("%d", &t); for(int k=1; k<=t; k++) { scanf("%d%d", &n, &m); for(int i=1; i<=n; i++) { f[i]=l[i]=i; } flag=0; while(m--) { scanf("%d%d", &u, &v); if(!flag && merge(u,v)) flag=1; } if(flag) printf("Scenario #%d:\nSuspicious bugs found!\n\n", k); else printf("Scenario #%d:\nNo suspicious bugs found!\n\n", k); } return 0; }