`

hdu 3018 Ant Trip(欧拉回路)

阅读更多

Ant Trip

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 14   Accepted Submission(s) : 8
Problem Description
Ant Country consist of N towns.There are M roads connecting the towns.

Ant Tony,together with his friends,wants to go through every part of the country.

They intend to visit every road , and every road must be visited for exact one time.However,it may be a mission impossible for only one group of people.So they are trying to divide all the people into several groups,and each may start at different town.Now tony wants to know what is the least groups of ants that needs to form to achieve their goal.
Input
Input contains multiple cases.Test cases are separated by several blank lines. Each test case starts with two integer N(1<=N<=100000),M(0<=M<=200000),indicating that there are N towns and M roads in Ant Country.Followed by M lines,each line contains two integers a,b,(1<=a,b<=N) indicating that there is a road connecting town a and town b.No two roads will be the same,and there is no road connecting the same town.

 

Output
For each test case ,output the least groups that needs to form to achieve their goal.

 

Sample Input
3 3 1 2 2 3 1 3 4 2 1 2 3 4

 

Sample Output
1 2
Hint
New ~~~ Notice: if there are no road connecting one town ,tony may forget about the town. In sample 1,tony and his friends just form one group,they can start at either town 1,2,or 3. In sample 2,tony and his friends must form two group.
 
          题目大意:其实题目意思就是给你一幅图,问最少用多少笔可以把整幅图划完,每条边只能经过一次,孤立点忽略不计。这个就是欧拉回路的问题,判断划几笔要看入度和出度的值,还有入度-出度的值,判断有多少个欧拉路。用并查集来判断连通性,度数判断欧拉回路。不多说,下面代码。
代码:
#include <iostream>
#include <stdio.h>
#include <memory.h>
#include <vector>
using namespace std;

int father[100005], deg[100005], odd[100005];
bool hash[100005];
vector<int> a;
int n, m, sum;

void init()
{
    int i;
    a.clear();
    memset(hash, false, sizeof(hash));
    memset(deg, 0, sizeof(deg));
    memset(odd, 0, sizeof(odd));
    for(i = 1; i <= n; i++) father[i] = i;
}

int find(int x)
{
    if(x != father[x])
    {
        father[x] = find(father[x]);
    }
    return father[x];
}

void Union(int x, int y)
{
    father[x] = y;
}

int main()
{
    int i, k, x, y, fx, fy;
    while(scanf("%d %d", &n, &m) != EOF)
    {
        init();
        for(i = 1; i <= m; i++)
        {
            scanf("%d %d", &x, &y);
            deg[x]++;
            deg[y]++;
            fx = find(x);
            fy = find(y);
            if(fx != fy) Union(fx, fy);
        }
        for(i = 1; i <= n; i++)
        {
            k = find(i);
            if(!hash[k])
            {
                a.push_back(k); //a保存着集合,集合就是图
                hash[k] = true;
            }
            if(deg[i]%2 == 1) odd[k]++; //保存这个集合的奇数度数的个数
        }
        sum = 0;
        for(i = 0; i < a.size(); i++)
        {
            k = a[i];
            if(deg[k] == 0) continue;   //孤立点
            if(odd[k] == 0) sum++;      //改集合是欧拉回路,有一条路
            else sum += odd[k]/2;
        }
        printf("%d\n", sum);
    }

    return 0;
}
 
0
0
分享到:
评论

相关推荐

    算法-欧拉回路(HDU-1878)(包含源程序).rar

    HDU-1878是算法竞赛中的一道题目,它要求参赛者对给定的图进行算法设计和编程实现,以判断是否存在欧拉回路,并在存在的情况下输出该回路。解决这类问题的一个经典算法是弗雷沃算法,也称作Kosaraju-Sharir算法,它...

    欧拉回路题集

    2. **【HDU】3018 Ant Trip 一笔画问题** - **题目描述**:给定一个无向图,判断其是否能一笔画出,即是否存在欧拉路径。 - **解题思路**:如果所有节点的度数均为偶数,则存在欧拉回路;如果有两个节点度数为...

    hdu 1695 GCD(欧拉函数+容斥原理).docx

    "hdu 1695 GCD(欧拉函数+容斥原理)" 题目大意是:给定 a, b, c, d, k,找到一队 x, y,满足 g(x, y) = k,且 x ∈ [1, b], y ∈ [1, d],问有多少对符合要求的 (x, y)。 思路是:gcd(x, y) == k 解释 x, y 都能...

    hdu.rar_hdu

    HDU(杭州电子科技大学在线评测系统)是一个深受程序员喜爱的在线编程练习平台,它提供了丰富的算法题目供用户挑战,帮助他们提升编程技能和算法理解能力。"hdu.rar_hdu"这个压缩包文件很可能是某位程序员整理的他在...

    HDU_2010.rar_hdu 2010_hdu 20_hdu acm20

    【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...

    总模板_lsy_WF[2015-04-16]1

    2. **磁鼓欧拉回路(HDU 2894)**:这是一个具体的问题实例,可能涉及到特定的解题策略或数据结构。 3. **混合欧拉路欧拉回路的判断-&gt;网络流模型**:利用网络流的方法来判断一个图是否存在欧拉回路,通过建立源点和...

    HDU题目java实现

    【标题】"HDU题目java实现"所涉及的知识点主要集中在使用Java编程语言解决杭州电子科技大学(HDU)在线评测系统中的算法问题。HDU是一个知名的在线编程竞赛平台,它提供了大量的算法题目供参赛者练习和提交解决方案...

    ACM HDU题目分类

    ACM HDU 题目分类 ACM HDU 题目分类是指对 HDU 在线判题系统中题目的分类,总结了大约十来个分类。这些分类将有助于编程选手更好地理解和解决问题。 DP 问题 DP(Dynamic Programming,动态规划)是一种非常重要...

    hdu1250高精度加法

    ### hdu1250高精度加法 #### 背景介绍 在计算机科学与编程竞赛中,处理大整数运算(特别是加法、减法、乘法等)是常见的需求之一。当数字的位数超过了标准数据类型(如`int`、`long`等)所能表示的最大值时,就需要...

    hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj

    【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...

    HDU DP动态规划

    【标题】"HDU DP动态规划"涉及到的是在算法领域中的动态规划(Dynamic Programming,简称DP)技术,这是解决复杂问题的一种高效方法,尤其适用于有重叠子问题和最优子结构的问题。动态规划通常用于优化多阶段决策...

    HDU1059的代码

    HDU1059的代码

    hdu1001解题报告

    hdu1001解题报告

    hdu 1574 passed sorce

    hdu 1574 passed sorce

    ACM HDU

    【ACM HDU】指的是在ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)中,参赛者在杭州电子科技大学(Hangzhou Dianzi University,简称HDU)的在线评测系统上完成并已解决的题目集合...

    hdu2101解决方案

    hdu2101AC代码

    杭电ACMhdu1163

    【标题】:杭电ACMhdu1163 【描述】:这是一道源自杭州电子科技大学(Hangzhou Dianzi University,简称HDU)的ACM编程竞赛题目,编号为1163。这类问题通常需要参赛者利用计算机编程解决数学、逻辑或算法上的挑战,...

    Hdu1000—2169部分代码

    HDU是杭州电子科技大学(Hangzhou Dianzi University)举办的一个在线编程竞赛平台,全称为HDU Online Judge。ACM是国际大学生程序设计竞赛(International Collegiate Programming Contest)的缩写,是一个全球性的...

    hdu 5007 Post Robot

    hdu 5007 Post Robot 字符串枚举。 暴力一下就可以了。

    HDU.rar_hdu_hdu07_com_shownv9b_www.563hdu.

    【标题】"HDU.rar_hdu_hdu07_com_shownv9b_www.563hdu." 暗示这是一个与HDU(杭州电子科技大学在线编程平台)相关的压缩包,其中可能包含了该平台上的编程竞赛题目或练习题目的源代码。"hdu07"可能是某个特定题目的...

Global site tag (gtag.js) - Google Analytics