http://poj.org/problem?id=2492
和poj 1703 一样不再多说
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<queue> #include<algorithm> #include<set> using namespace std; const int N=100010; int f[N]; int same[N]; int findf(int x) { if(f[x]!=x) { int temp=f[x]; f[x]=findf(f[x]); if(same[x]==same[temp]) { same[x]=1; }else { same[x]=0; } } return f[x]; } int main() { int T; scanf("%d",&T); for(int w=1;w<=T;++w) { int n,m; scanf("%d %d",&n,&m); for(int i=1;i<=n;++i) { f[i]=i; same[i]=1; } int ans=0; while(m--) { int x,y; scanf("%d %d",&x,&y); if(ans) continue; int xf=findf(x); int yf=findf(y); if(xf==yf) { if(same[x]==same[y]) {ans=1;continue;} } f[xf]=yf; if(same[x]==same[y]) { same[xf]=0; }else { same[xf]=1; } } printf("Scenario #%d:\n",w); if(ans==0) printf("No suspicious bugs found!\n\n"); else printf("Suspicious bugs found!\n\n"); } return 0; }