• HDU 1878 欧拉回路


    并查集水题。

    一个图存在欧拉回路的判断条件:

    无向图存在欧拉回路的充要条件

        一个无向图存在欧拉回路,当且仅当该图所有顶点度数都是偶数且该图是连通图。

    有向图存在欧拉回路的充要条件

        一个有向图存在欧拉回路,所有顶点的入度等于出度且该图是连通图

    1.每次加点都对两个点的度数加1

    2.加点时如果两点不在同一集合,则合并两点所在集合。

    3.最后统计每个点度数是否为偶数,并且判断连不连通。

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    using namespace std;
    #define N 1100
    
    int du[N];
    int fa[N];
    
    void makeset(int n)
    {
        for(int i=1;i<=n;i++)
        {
            fa[i] = i;
        }
    }
    
    int findset(int x)
    {
        if(x != fa[x])
        {
            fa[x] = findset(fa[x]);
        }
        return fa[x];
    }
    
    void unionset(int a,int b)
    {
        int x = findset(a);
        int y = findset(b);
        if(x != y)
        {
            fa[x] = y;
        }
    }
    
    int main()
    {
        int n,m,i;
        int a,b;
        while(scanf("%d",&n)!=EOF && n)
        {
            memset(du,0,sizeof(du));
            makeset(n);
            scanf("%d",&m);
            for(i=1;i<=m;i++)
            {
                scanf("%d%d",&a,&b);
                du[a]++;
                du[b]++;
                unionset(a,b);
            }
            int flag = 1;
            int cnt = 0;
            for(i=1;i<=n;i++)
            {
                if(fa[i] == i)
                    cnt++;
            }
            if(cnt>=2)
                flag = 0;
            if(flag){
            for(i=1;i<=n;i++)
            {
                if(du[i]%2 != 0)
                {
                    flag=0;
                    break;
                }
            }
            }
            if(flag)
                cout<<1<<endl;
            else
                cout<<0<<endl;
        }
        return 0;
    }
    View Code

    作者:whatbeg
    出处1:http://whatbeg.com/
    出处2:http://www.cnblogs.com/whatbeg/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    更多精彩文章抢先看?详见我的独立博客: whatbeg.com

  • 相关阅读:
    opencv如何载入内存中的图像文件
    C++ 中指针与引用的区别
    2014新版12306接口分析
    Qt 多线程与数据库操作需要注意的几点问题
    设置 Linux 的 LD_LIBRARY_PATH 变量
    linux+Qt程序如何打包发布
    c++(重载、覆盖、隐藏)
    Pytorch中的强化学习
    WordNet简介
    Pytorch中的数学函数
  • 原文地址:https://www.cnblogs.com/whatbeg/p/3504210.html
Copyright © 2020-2023  润新知