http://acm.hdu.edu.cn/showproblem.php?pid=1878
一个无向图存在欧拉回路,当且仅当该图所有顶点度数都是偶数且该图是连通图。
连通图用并查集判断
View Code
#include <iostream> using namespace std ; int hash[1002] ; int idx[1002] ; int find(int x) { return idx[x]==x?x:idx[x]=find(idx[x]) ; } int main() { int n,m ; while(scanf("%d",&n),n) { memset(hash,0,sizeof(hash)) ; scanf("%d",&m) ; int a,b ; for(int i=1;i<=n;i++) idx[i]=i ; while(m--) { scanf("%d%d",&a,&b) ; int p,q ; p=find(a) ; q=find(b) ; if(p!=q) { if(p>q) idx[p]=q ; else idx[q]=p ; } hash[a]++,hash[b]++ ; } int flag=0,zz ; zz=idx[1] ; for(int i=1;i<=n;i++) { if(hash[i]&1) { flag=1 ; break ; } if(zz!=idx[i]) { flag=1 ; break ; } } if(flag) puts("0") ; else puts("1") ; } return 0 ; }