hdu 1878 欧拉回路

判断一个连通图无向图是否存在欧拉回路的条件: 无奇度的节点

判断是不是连通图,可以用并查集

判断节点是不是奇度可以开一个数组记录。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

const int maxn=1010;
int ff[maxn],father[maxn],summ[maxn];
int n,m;

int find(int x)
{
    if(x!=father[x]) father[x]=find(father[x]);
    return father[x];
}

int main()
{
    int i,u,v;
    while(~scanf("%d",&n))
    {
        if(n==0) break;
        scanf("%d",&m);
        for(i=0;i<=n;i++) father[i]=i;
        memset(ff,0,sizeof(ff));
        memset(summ,0,sizeof(summ));
        for(i=0;i<m;i++)
        {
            scanf("%d%d",&u,&v);
            summ[u]++;summ[v]++;
            int fu=find(u);
            int fv=find(v);
            if(fu!=fv) father[fu]=fv;
        }
        for(i=1;i<=n;i++){int yy=find(i);ff[yy]=1;}
        int tott=0,jieguo=0;
        for(i=1;i<=n;i++) if(ff[i]==1) tott++;
        for(i=1;i<=n;i++) if(summ[i]%2==1) {jieguo=1;break;}
        if(tott!=1) jieguo=1;
        if(jieguo==1) printf("0\n");
        else printf("1\n");
    }
    return 0;
}

 

posted @ 2015-06-09 16:41  Fighting_Heart  阅读(217)  评论(0编辑  收藏  举报