并查集判断图是否连通,再判断度数
#include<cstdio>
#include<cstring>
#define _rep(i,a,b) for(int i=(a);i<=(b);i++)
const int N=1010;
int set[N];
int deg[N];
int findset(int x)
{
return set[x]==x?x:set[x]=findset(set[x]);
}
void unionset(int x,int y)
{
int fx=findset(x);
int fy=findset(y);
if(fx!=fy)set[fy]=fx;
}
int main()
{
//freopen("in.txt","r",stdin);
int n,m,u,v;
while(scanf("%d",&n)&&n)
{
bool flag=1;
_rep(i,1,n)
set[i]=i;
memset(deg,0,sizeof(deg));//漏了...
scanf("%d",&m);
_rep(i,1,m)
{
scanf("%d%d",&u,&v);
deg[u]++,deg[v]++;
unionset(u,v);
}
int fa=findset(1);
_rep(i,2,n)
{
if(deg[i]&1)//奇数度不存在欧拉回路
{
puts("0");
flag=0;
break;
}
if(fa!=findset(i))//不连通也不存在欧拉回路
{
puts("0");
flag=0;
break;
}
}
if(flag)puts("1");
}
return 0;
}