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