题目:http://acm.hdu.edu.cn/showproblem.php?pid=1878
代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int n,m; int f[10000]; int du[1005]; int init() { for(int i=1;i<=n;i++) f[i]=i; } int getf(int v) { if(f[v]==v) return v; else { f[v]=getf(f[v]); return f[v]; } } int merge(int v,int u) { int t1,t2; t1=getf(v); t2=getf(u); if(t1!=t2) { f[t2]=t1; } } int main() { while(~scanf("%d",&n)) { if(n==0) break; scanf("%d",&m); init(); memset(du,0,sizeof(du)); int x,y; for(int i=0;i<m;i++) { scanf("%d%d",&x,&y); merge(x,y); du[x]++; du[y]++; } int temp=0; for(int i=1;i<=n;i++) { if(du[i]%2==0&&f[i]==1) { temp++; } } if(temp==n) printf("1\n"); else printf("0\n"); } }