题目链接:传送门
思路:就是判断无向图的欧拉回路的两个条件:(1)连通性(2)点的度数是偶数
注意:两个条件一同时满足才行。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = ;
int fa[maxn],du[maxn],n,m;
void Init()
{
memset(du,,sizeof(du));
for(int i=;i<=n;i++) fa[i]=i;
}
int f(int x)
{
if(fa[x]==x) return fa[x];
else{
fa[x]=f(fa[x]);
return fa[x];
}
}
int main(void)
{
int i,j,x,y,t1,t2;
while(~scanf("%d",&n)&&n){
scanf("%d",&m);
Init();
for(i=;i<m;i++){
scanf("%d%d",&x,&y);
du[x]++;du[y]++;
t1=f(x);t2=f(y);
if(t1!=t2) fa[t2]=t1;
} int cnt=,fg=;
for(i=;i<=n;i++){
if(fa[i]!=fa[]) cnt=;
if(du[i]%) fg=;
} if(cnt==&&fg==) printf("1\n");
else printf("0\n");
}
return ;
}