hdu1878-并查集,欧拉回路
纯裸题。。写着方便理解。。。
题意:判断一个无向图是否存在欧拉回路。。。
解题思路:并查集判断一下是否联通,然后再判断一下点的度数是否为偶数就行了;
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #define maxn 2010 using namespace std; int f[maxn]; int findf(int x) { if(f[x]==x) return x; else return findf(f[x]); } void join(int x,int y) { int t1,t2; t1=findf(x); t2=findf(y); if(t1!=t2) f[t2]=t1; } int main() { int n; int degree[maxn]; int m; int cnt; int x,y; int flag; while(scanf("%d%d",&n,&m)!=EOF) { if(n==0) break; cnt=0,flag=0; memset(degree,0,sizeof(degree)); for(int i=1;i<=n;i++) f[i]=i; for(int i=1;i<=m;i++) { scanf("%d%d",&x,&y); join(x,y); degree[y]++; degree[x]++; } for(int i=1;i<=n;i++) { if(f[i]==i) cnt++; } for(int i=1;i<=n;i++) { if(degree[i]%2==1) flag=1; } if(cnt==1&&flag==0) printf("1\n"); else printf("0\n"); } return 0; }