HDU 1878 欧拉回路(并查集&&欧拉回路)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1878

代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>

using namespace std;

int n,m;
int f[10000];
int du[1005];

int init()
{
    for(int i=1;i<=n;i++)
        f[i]=i;
}

int getf(int v)
{
    if(f[v]==v)
        return v;
    else
    {
        f[v]=getf(f[v]);
        return f[v];
    }
}

int merge(int v,int u)
{
    int t1,t2;
    t1=getf(v);
    t2=getf(u);
    if(t1!=t2)
    {
        f[t2]=t1;
    }
}

int main()
{
    while(~scanf("%d",&n))
    {
        if(n==0)
            break;
        scanf("%d",&m);
        init();
        memset(du,0,sizeof(du));
        int x,y;
        for(int i=0;i<m;i++)
        {
            scanf("%d%d",&x,&y);
            merge(x,y);
            du[x]++;
            du[y]++;
        }
        int temp=0;
        for(int i=1;i<=n;i++)
        {
            if(du[i]%2==0&&f[i]==1)
            {
                temp++;
            }
        }

        if(temp==n)
            printf("1\n");
        else
            printf("0\n");
    }
}


你可能感兴趣的:(HDU 1878 欧拉回路(并查集&&欧拉回路))