【杭电】[1878]欧拉回路

这里写图片描述
这里写图片描述

判断是否存在欧拉回路

1.每个点必须有偶数点连接
2.只能有一个根

所以用并查集可以轻松完成

#include<stdio.h>
int par[1020];
int r[1020];
int find(int m) {
    if(par[m]==m)
        return m;
    else
        return par[m]=find(par[m]);
}
void unite(int x,int y) {
    x=find(x);
    y=find(y);


    par[y]=x;
}
int main() {
    int n;
    while(scanf("%d",&n),n) {
        int m;
        scanf("%d",&m);
        for(int i=1; i<=n; i++) {
            r[i]=0;
            par[i]=i;
        }
        while(m--) {
            int x,y;
            scanf("%d %d",&x,&y);
            unite(x,y);
            r[x]++;
            r[y]++;
        }
        int cnt=0;
        for(int i=1; i<=n; i++)
            if(i==find(i))
                cnt++;
        if(cnt!=1) {
            printf("0\n");
            continue;
        }
        int i;
        for(i=1; i<=n; i++) {
            if(r[i]&1)
                break;
        }
        if(i<=n)
            printf("0\n");
        else
            printf("1\n");
    }
    return 0;
}

题目地址:【杭电】[1878]欧拉回路

posted @ 2016-04-01 14:55  BoilTask  阅读(15)  评论(0编辑  收藏  举报