Ant Trip(区别于二分匹配中最小路径覆盖的一笔画问题)
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=3018
题目:
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.
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.
1 2
2 3
1 3
4 2
1 2
3 4
2
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.
/*
问题 给出n个顶点和m条边,n<=100000,m<=200000,若要遍历所有的边且每条边只能走一次,问至少需要几个起点
保证没有重复道路,保证道路两端的城市是不同的,存在孤立的点,例如 3个点,1条边,1和2联通,那么3就是孤立的点 解题思路 简单总结就是一笔画问题,画的时候,要么a--->b(一条线),即a和b均为奇点(度数为奇数的点),要么a--->a(一个圈),即该圈中没有奇点
由于连通图中不可能存在奇数个奇点,换句话说连通图中奇点要么不出现,即存在欧拉回路,只需要一笔,要么成对出现,每一对需要一笔
那么总的笔画数等于 所有奇点的个数除以2(孤立的点度数为0,为偶数) 加上 欧拉回路数 输入时计算每个顶点的度数,使用并查集将图分成一块一块,遍历每一个顶点,找出奇点计数并且标记其根节点;再遍历顶点,
如果不是孤立的点 且 是根 且 该根没有被标记过,即为欧拉回路。
*/
#include<stdio.h>
#include<string.h>
int deg[],fat[],book[];
void merge(int a, int b);
int getf(int x); int main()
{
int n,m;
int i,a,b;
while(scanf("%d%d",&n,&m) != EOF)
{
memset(deg,,sizeof(deg));
for(i=;i<=n;i++){
fat[i]=i;
}
for(i=;i<=m;i++){
scanf("%d%d",&a,&b);
deg[a]++;
deg[b]++;
merge(a,b);
} memset(book,,sizeof(book));
int singsum=;
for(i=;i<=n;i++){
if(deg[i] & ){
book[ getf(i) ]=;//标记以该点为根的一块图中存在奇点
singsum++;
}
} int eulenum=;
for(i=;i<=n;i++){
if(deg[i] > && i==fat[i] && == book[i])//不是孤立的点 且 是根 且 该根没有被标记过,即是欧拉回路
eulenum++;
}
printf("%d\n",singsum/+eulenum);
}
return ;
}
void merge(int a, int b)
{
int t1,t2;
t1=getf(a);
t2=getf(b);
if(t1 != t2){
fat[t2]=t1;
}
}
int getf(int x)
{
return fat[x]==x ? x : fat[x]=getf(fat[x]);
}
Ant Trip(区别于二分匹配中最小路径覆盖的一笔画问题)的更多相关文章
- HDU 3861--The King’s Problem【scc缩点构图 && 二分匹配求最小路径覆盖】
The King's Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU3335 Divisibility Dilworth定理+最小路径覆盖
首先需要一些概念: 有向图,最小路径覆盖,最大独立集,Dilworth,偏序集,跳舞链(DLX).... 理解一: 对于DAG图,有:最大独立集=点-二分匹配数,二分匹配数=最小路径覆盖. 而无向图, ...
- HDU 4606 Occupy Cities (计算几何+最短路+二分+最小路径覆盖)
Occupy Cities Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- POJ3020 Antenna Placement(二分图最小路径覆盖)
The Global Aerial Research Centre has been allotted the task of building the fifth generation of mob ...
- HDU 3861 The King’s Problem(强连通+二分图最小路径覆盖)
HDU 3861 The King's Problem 题目链接 题意:给定一个有向图,求最少划分成几个部分满足以下条件 互相可达的点必须分到一个集合 一个对点(u, v)必须至少有u可达v或者v可达 ...
- 【网络流24题】 No.3 最小路径覆盖问题 (网络流|匈牙利算法 ->最大二分匹配)
[题意] 给定有向图 G=(V,E).设 P 是 G 的一个简单路(顶点不相交) 的集合.如果 V 中每个顶点恰好在 P 的一条路上,则称 P 是 G 的一个路径覆盖. P 中路径可以从 V 的任何一 ...
- hdu 1853 Cyclic Tour (二分匹配KM最小权值 或 最小费用最大流)
Cyclic Tour Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/65535 K (Java/Others)Total ...
- POJ 3020 Antenna Placement【二分匹配——最小路径覆盖】
链接: http://poj.org/problem?id=3020 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
- HDU 4606 Occupy Cities ★(线段相交+二分+Floyd+最小路径覆盖)
题意 有n个城市,m个边界线,p名士兵.现在士兵要按一定顺序攻占城市,但从一个城市到另一个城市的过程中不能穿过边界线.士兵有一个容量为K的背包装粮食,士兵到达一个城市可以选择攻占城市或者只是路过,如果 ...
随机推荐
- Android-Java-封装
先看一个未封装的Demo案例一: package android.java.oop03; class Person { int age; } public class PottingDemo { pu ...
- Android------------------的快捷键的使用
https://www.cnblogs.com/shidian/p/6937630.html
- delphi datetimepicker 修改时间无效问题
今天用delphi写个程序,使用datetimepicker获得想要的时间.蛋疼的问题是无论怎么调整明明看着控件里面的日期变了,但是show出来的datetimepicker.datetime日期都不 ...
- Ubuntu18.04 - 安装深度桌面(Deepin Linux Desktop)
深度Linux官网:https://www.deepin.org 深度桌面感觉确实不错,所以打算安装上来,以后体验一下,下面是安装的命令: 1, sudo add-apt-repository ppa ...
- Linux系统文件权限管理(6)
Linux操作系统是多任务(Multi-tasks)多用户(Multi-users)分时操作系统,linux操作系统的用户就是让我们登录到linux的权限,每当我们使用用户名登录操作系统时,linux ...
- 带你走进二进制-一次APT攻击分析
原文:https://osandamalith.com/2017/06/04/apt-attack-in-bangladesh/ 由prison翻译整理,首发i春秋 引言; 这是一次来自遥远国 ...
- ArrayList的源码分析
在项目中经常会用到list集合来存储数据,而其中ArrayList是用的最多的的一个集合,这篇博文主要简单介绍ArrayList的源码分析,基于JDK1.7: 这里主要介绍 集合 的属性,构造器,和方 ...
- python使用selector模块编写FTP
server import os import socket import time import selectors BASE_DIR = os.path.dirname(os.path.abspa ...
- 2. GitHub远程仓库
1. GitHub ssh-keygen -t rsa -C "youremail@example.com" 之后再用户主目录里会有隐藏的.ssh目录,里面有id_r ...
- vue教程3-06 vue路由嵌套(多层路由),路由其他信息
多层嵌套: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...