hdu 1878 欧拉回路
判断是否存在欧拉回路
存在欧拉回路的条件:
无向图
1) 连通
2) 所有节点的度为偶数
不知道用并查集做是不是本来就比较慢,反正慢了好多
#include<iostream> using namespace std; int r[1000],f[1000]; int find(int x) { if(x==f[x]) return x; f[x]=find(f[x]); }; void Union(int x,int y) { int a=find(x); int b=find(y); if(a!=b) f[b]=a; return; } void init(int n) { for(int i=0;i<=n;i++) f[i]=i; memset(r,0,sizeof(r)); } int main() { int n,m,a,b; while(cin>>n&&n) { cin>>m; init(n); for(int i=0;i<m;i++) { cin>>a>>b; r[a]++; r[b]++; Union(a,b); } int count=0; for(int i=0;i<=n;i++) { //cout<<r[i]<<endl; if(r[i]&&i==find(i)) { count++; } } if(count!=1) { cout<<0<<endl; continue; } int flag=0; for(int i=0;i<=n;i++) if(r[i]&&r[i]%2!=0) { flag=1;break; } if(!flag) cout<<1<<endl; else cout<<0<<endl; } return 0; }