这道题WA了好多次、测试数据感觉有点问题……
并查集啊,必须有。
#include<stdio.h> #include<string.h> int ad[1003]; int f[1003]; int find(int x){ if(f[x]==x){ return x; }else return f[x]=find(f[x]); } int main(){ int n,m,a,b,i; while(scanf("%d",&n)&&n) { scanf("%d",&m); memset(ad,0,sizeof(ad)); for(i=1;i<=n;i++) f[i]=i; for( i=1;i<=m;i++){ scanf("%d %d",&a,&b); ad[a]++; ad[b]++; if(a>b){ a=a^b^(b=a); } f[find(a)]=find(b); } int flag=1; for(i=1;i<=n;i++){ if(ad[i]%2==1){ flag=0; break; } } int tmp=find(1); if(flag) for(i=2;i<=n;i++){ if(find(i)!=tmp){ flag=0; break; } } if(flag) printf("1 "); else printf("0 "); } return 0; }