http://acm.hdu.edu.cn/showproblem.php?pid=1878
3 3 1 2 1 3 2 3 3 2 1 2 2 3 0
1 0
代码如下:
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int fa[10005],du[10005]; int n,m; void init() { for(int i=1;i<=n;i++) { du[i]=0; fa[i]=i; } } int find(int x) { if(x==fa[x]) return x; return fa[x]=find(fa[x]); } void add(int a,int b) { a=find(a); b=find(b); if(a!=b) { fa[b]=a; } } int main() { int a,b; while(~scanf("%d",&n)) { int flag=1; if(n==0) break; scanf("%d",&m); init(); for(int i=0;i<m;i++) { scanf("%d%d",&a,&b); ++du[a]; ++du[b]; add(a,b); } int sum=0; for(int i=1;i<=n;i++) { if(fa[i]==i&&du[i]!=0) sum++; } //printf("(%d)\n",sum); if(sum>1) { printf("0\n"); continue; } for(int i=1;i<=n;i++) { if(du[i]%2) { flag=0; break; } } if(flag==1) printf("1\n"); else printf("0\n"); } return 0; }