• hdoj 1878 欧拉回路(无向图欧拉回路+并查集)


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

    思路分析:该问题给定一个无向图,要求判断该无向图是否存在欧拉回路;无向图判断存在欧拉回路的两个必要条件:该无向图为连通图且所有的结点的度数为偶数;

    代码如下:

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    using namespace std;
    
    const int MAX_N = 1000 + 10;
    int fa[MAX_N];
    int link[MAX_N];
    
    void Init()
    {
        for (int i = 0; i < MAX_N; ++i)
        {
            fa[i] = i;
            link[i] = 0;
        }
    }
    
    int Find(int a)
    {
        if (fa[a] == a)
            return a;
        else
            return fa[a] = Find(fa[a]);
    }
    
    int Union(int a, int b)
    {
        int fa_a = Find(a);
        int fa_b = Find(b);
    
        if (fa_a == fa_b)
            return -1;
        if (fa_a > fa_b)
            fa[fa_b] = fa_a;
        else
            fa[fa_a] = fa_b;
        return 1;
    }
    
    int main()
    {
        int ver_num, road_num;
        int ver_1, ver_2;
    
        while (scanf("%d", &ver_num) != EOF && ver_num)
        {
            scanf("%d", &road_num);
            Init();
            for (int i = 0; i < road_num; ++i)
            {
                scanf("%d %d", &ver_1, &ver_2);
                link[ver_1]++;
                link[ver_2]++;
                Union(ver_1, ver_2);
            }
            int set_count = 0;
            bool ok = true;
            for (int i = 1; i <= ver_num; ++i)
            {
                if (fa[i] == i)
                    set_count++;
                if ((link[i] & 1) != 0 || set_count > 1)
                    ok = false;
                if (!ok)
                    break;
            }
            if (ok)
                printf("1
    ");
            else
                printf("0
    ");
        }
        return 0;
    }
  • 相关阅读:
    Ubuntu 16 安装ElasticSearch
    二叉树
    归并排序
    快速排序
    Git、Github使用
    445. 两数相加 II
    141. 环形链表
    92. 反转链表 II
    19. 删除链表的倒数第N个节点
    2. 两数相加
  • 原文地址:https://www.cnblogs.com/tallisHe/p/4671904.html
Copyright © 2020-2023  润新知