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;

}

 

你可能感兴趣的:(HDU)