hdu 1878_欧拉回路_并查集

来源:互联网 发布:东莞金蝶软件 编辑:程序博客网 时间:2024/05/18 04:57

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

/*如果图中所有顶点的度为偶数(出度+入度,即出度等于入度),则该图存在欧拉回路*/#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define maxn 1005int fa[maxn],degree[maxn];int n,m,i,fg,x,y,cnt,st,nd;int find_set(int x){    if(fa[x] == x)return x;elsereturn find_set(fa[x]); }void union_set(int x,int y){int root_x = find_set(x);int root_y = find_set(y);if(root_x != root_y)fa[root_y] = root_x;} int main(){    while(~scanf("%d",&n),n)    {        memset(degree,0,sizeof(degree));for(i = 1; i <= n; i++)fa[i] = i;        cnt = 0;        scanf("%d",&m);        for(i = 1;i <= m;i++)        {            scanf("%d%d",&st,&nd);            if(st > nd)//注意这里的处理                swap(st,nd);            degree[st]++;            degree[nd]++;union_set(st,nd);        }        for(i = 1;i <= n;i++)        {            if(degree[i] % 2 == 0 && fa[i] == 1)                cnt++;        }        if(cnt == n)            printf("1\n");        else            printf("0\n");    }    return 0;}


0 0