hdoj 3018 Ant Trip(无向图欧拉路||一笔画+并查集)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3018
思路分析:题目可以看做一笔画问题,求最少画多少笔可以把所有的边画一次并且只画一次;
首先可以求出该无向图中连通图的个数,在每个无向连通图中求出需要画的笔数再相加即为所求。在一个无向连通图中,如果所有的点的度数为偶数则存在一个欧拉回路,
则只需要画一笔即可;如果图中存在度数为奇数的点,则需要画的笔数为度数为奇数的点的个数 /2;需要注意的孤立的点不需要画;
代码如下:
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; const int MAX_N = + ;
int fa[MAX_N], odd[MAX_N];
int link[MAX_N], set_count[MAX_N]; void Init()
{
for (int i = ; i < MAX_N; ++i)
{
set_count[i] = ;
fa[i] = i;
}
} int Find(int num)
{
if (fa[num] == num)
return num;
else
return fa[num] = Find(fa[num]);
} int Union(int a, int b)
{
int fa_a = Find(a);
int fa_b = Find(b); if (fa_a == fa_b)
return -;
else if (fa_a > fa_b)
{
fa[fa_b] = fa_a;
set_count[fa_a] += set_count[fa_b];
}
else
{
fa[fa_a] = fa_b;
set_count[fa_b] += set_count[fa_a];
}
return ;
} int main()
{
int vertex_num, road_num;
int ver_1, ver_2; while (scanf("%d %d", &vertex_num, &road_num) != EOF)
{
int ans = ; Init();
memset(link, , sizeof(link));
memset(odd, , sizeof(odd));
for (int i = ; i < road_num; ++i)
{
scanf("%d %d", &ver_1, &ver_2);
link[ver_1]++;
link[ver_2]++;
Union(ver_1, ver_2);
}
for (int i = ; i <= vertex_num; ++i)
{
int fa = Find(i);
if ((link[i] & ) == )
odd[fa]++;
}
for (int i = ; i <= vertex_num; ++i)
{
if (fa[i] == i && set_count[i] != )
{
if (odd[i] == )
ans++;
else
ans += odd[i] / ;
}
}
printf("%d\n", ans);
}
return ;
}
hdoj 3018 Ant Trip(无向图欧拉路||一笔画+并查集)的更多相关文章
- Ant Trip HDU - 3018(欧拉路的个数 + 并查集)
题意: Ant Tony和他的朋友们想游览蚂蚁国各地. 给你蚂蚁国的N个点和M条边,现在问你至少要几笔才能所有边都画一遍.(一笔画的时候笔不离开纸) 保证这M条边都不同且不会存在同一点的自环边. 也就 ...
- HDU 3018 Ant Trip(欧拉回路,要几笔)
Ant Trip Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- [欧拉回路] hdu 3018 Ant Trip
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3018 Ant Trip Time Limit: 2000/1000 MS (Java/Others) ...
- 洛谷P1341 无序字母对[无向图欧拉路]
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- 2018.09.15 poj1041John's trip(欧拉路输出方案)
传送门 一个欧拉路输出方案的板子题. 竟然难在读入233. 代码: #include<iostream> #include<cstdio> #include<cstrin ...
- hdu 3018 Ant Trip 欧拉回路+并查集
Ant Trip Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
- HDU 3018 Ant Trip (欧拉回路)
Ant Trip Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- hiho一下 第四十九周 题目1 : 欧拉路·一【无向图 欧拉路问题】
题目1 : 欧拉路·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找到最 ...
- HDU 3018 Ant Trip
九野的博客,转载请注明出处: http://blog.csdn.net/acmmmm/article/details/10858065 题意:n个点m条边的无向图,求用几笔可以把所有边画完(画过的边 ...
随机推荐
- Let's Format Css Documents
每次想参考一些好看网站的时候,打开css文档都是一行的,琢磨了下就自己写了块短短的代码,各路Java大神别笑我呀.^_^ 复制粘贴控制台的输出就好了.(瞬间觉得跟上大神的脚步了←_←) package ...
- yii2.0 从控制器到视图的输出
在controllers/SiteController.php文件中,添加 public function actionSay($message = 'Hello') { return $this-& ...
- 【LeetCode题意分析&解答】38. Count and Say
The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 111221, ...
- for循环例子1、2、3
/* Name:for循环例子1.2.3 Copyright: By.不懂网络 Author: Yangbin Date:2014年2月12日 02:12:41 Description:该代码用来熟悉 ...
- BaaS with Kinvey and Delphi 10.1 Berlin
In this article I will show you how to connect yourdesktop and mobile applications to a mobile backe ...
- XmlDocument加载有Xmlns的xml文档,使用Xpath
using System; using System.IO; using System.Xml; public class Sample { public static void Main() { X ...
- PHP并发最佳实践
直接参考大牛的: http://www.searchtb.com/2012/06/rolling-curl-best-practices.html
- selenium的config.ini
config.ini # What WebDriver to use for the tests#driver=phantomjs#driver=firefoxdriver=chrome#driver ...
- MRC下单例模式的内存问题与ARC实现
单例模式保证一个类只能拥有一个静态的实例,类负责创建与维护这个实例,并提供一个统一的静态(类方法)访问方式,并封锁了这个类外部的代码对这个类对象的创建. .h文件: #import <Found ...
- Android应用开发基础篇(10)-----Menu(菜单)
链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/28/2372101.html 一.概述 Menu,简单来理解就是当你按下手机的“menu”键时所 ...