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\n");
        else
            printf("0\n");
    }
    return 0;
}
时间: 2024-10-11 05:53:20

hdoj 1878 欧拉回路(无向图欧拉回路+并查集)的相关文章

NYOJ42 一笔画问题 【欧拉回路】+【并查集】

一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来. 规定,所有的边都只能画一次,不能重复画. 输入 第一行只有一个正整数N(N<=10)表示测试数据的组数. 每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<=2000),分别表示这个画中有多少个顶点和多少条连线.(点的编号从1到P) 随后的Q行,每行有两个正整数A,B(0<

Catenyms+欧拉回路/欧拉路+并查集+POJ

Catenyms Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9617   Accepted: 2524 Description A catenym is a pair of words separated by a period such that the last letter of the first word is the same as the last letter of the second. For e

hdoj 2473 Junk-Mail Filter【并查集节点的删除】

Junk-Mail Filter Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7515    Accepted Submission(s): 2368 Problem Description Recognizing junk mails is a tough task. The method used here consists o

hdoj 3478 Catch(二分图判定+并查集)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3478 思路分析:该问题需要求是否存在某一个时刻,thief可能存在图中没一个点:将该问题转换为图论问题即为判断该图是否为一个连通图且不为二分图: (1)二分图的性质:对于无向图G=(V, E),如果可以将图中的点划分为两个不相交的点集X与Y = V - X(V为点集),使得图中所有的边邻接的两个点分别存在集合X与集合Y中,则称该图G为二分图: (2) 二分图判定算法:二分图一种判定方法是给图中的每一

hdoj 3635 Dragon Balls【并查集求节点转移次数+节点数+某点根节点】

Dragon Balls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4384    Accepted Submission(s): 1673 Problem Description Five hundred years later, the number of dragon balls will increase unexpecte

HDOJ 题目3367 Pseudoforest(并查集)

Pseudoforest Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1932    Accepted Submission(s): 746 Problem Description In graph theory, a pseudoforest is an undirected graph in which every conne

hdoj 1232 畅通工程 【并查集】

畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 37403    Accepted Submission(s): 19808 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通(但不一定有

poj2513——判断是否为欧拉图(并查集,trie树)

POJ 2513    Colored Sticks 欧拉回路判定,并查集,trie树 Time Limit: 5000MS   Memory Limit: 128000K Total Submissions: 31621   Accepted: 8370 Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with some color. Is it possibl

hdu 1878 欧拉回路+并查集

欧拉回路: 通过图中每条边且只通过一次,并且经过每一顶点的回路. 无向图欧拉回路的判定:图连通:图中所有节点度均为偶数 有向图欧拉回路的判定:图连通:所有节点入度等于出度 这道题属于无向图,首先用并查集判断图的联通性,各点的度数用一个数组保存下来. 如果一个点的根结点和其他点的根结点不同,则图不联通,有点度数为奇数也不满足欧拉回路,则输出0,否则输出1. 1 #include<iostream> 2 #include<algorithm> 3 #include<cmath&g