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 ;
}