HDU1878欧拉回路

时间:2021-10-25 11:40:59

这道题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\n");
else printf("0\n"); }
return 0; }