hdu 1151 最小覆盖路径算法证明

hdu 4214 题意:伞兵降落到一个星球上,每个人带着一个电台,只要任何一方进入另一方的覆盖范围,双方就可以沟通 联系到所有可以联系的战友,他们会在一个点()回合,用他们的电台合成一个功率更大的电台,新电台的覆盖面积是那些的和 一直这样合并下去,问最后剩下几个电台 所给数据的顺序就是伞兵落地的顺序,只有落地后才能打开电台,在它落地之前,前面的应该合并完。 #include #include #define 阅读详情

又是二分图。若还不知道匈牙利算法,看我前面的文章

先把每个点拆成两个,一个表示出,一个表示入,根据数据输入,对应的出点和对应入点之间构造了一条边。这样就有了一个二分图。

有向图的最小路径覆盖 = 总的点数(为拆分前的) - 最大匹配数。

证明如下:

先假设所有点我们都派出一个伞兵。然后每增加一条匹配,就代表我们从一个点出走向一个点。并且根据最大匹配的定义,我们可以直接看作是将这两个点合并到一个路径集合中,这个时候我们就可以减少一个伞兵。 所以 路径覆盖 = 总的点数 - 最大匹配数 。

然而这样我们并没有证明 是 “最小”覆盖。 接下来证明最小。 假设 不是最小,那么也就意味着还可以减少伞兵,而减少伞兵就必须合并某两个点(即匹配),而匹配已经最大,所以矛盾。

即 需要派遣的伞兵数 = 总点数 - 匹配数。    最少伞兵派遣 = 总点数 - 最大匹配数。

#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <string.h>
#define base 10
using namespace std;
bool vis[130],map[130][130];
int match[130],n,m;
bool find(int p)
{
	int i,j;
	for(i = 1; i <= m; i++)
	{
		if(!vis[i] && map[p][i])
		{
			vis[i] = 1;
			if( !match[i] || find(match[i])) 
			{
				match[i] = p;
				return 1;
			}
		}
	}
	return 0;
}
int main()
{
//	freopen("t.txt","r",stdin);
	int k,i,j,count,t,a,b;	
	scanf("%d",&t);
	while(t--)
	{
		memset(map,0,sizeof(map));
		memset(match,0,sizeof(match));
		count = 0;
		scanf("%d%d",&m,&n);//m 点, n 边 
		for(i = 0; i < n; i++)
		{
			scanf("%d%d",&a,&b);
			map[a][b] = 1;
		}
		for(i = 1; i <= m; i++)
		{
			memset(vis,0,sizeof(vis));
			if(find(i)) count++;
		}
		printf("%d\n",m-count);
	}
}

hdu1151 学习笔记 这题是一道DAG图的最小路径覆盖问题。 DAG图的最小路径覆盖: 用尽量少的不相交简单路径覆盖有向无环图(DAG)G的所有顶点,这就是DAG图的最小路径覆盖问题。 方法主体是:DAG图的最小路径覆盖数=节点数(n)- 最大匹配数(m) 在题目中,将所有地点(1,2,3...n)都当做两份,形成共含有2n个节点的二分图。然后寻找到最大匹配,在以节点数n减去最大匹配数就可以了。 匈牙利算 阅读详情

相关推荐

hdu-1151(最小路径覆盖)

大致题意:有n个十字路口,m条街道,每两个十字路口组成的街道是单向的,现在要在一些十字路口放置一些士兵进行看护,士兵可以通过街道从一个十字路口到达另一个十字路口(注意是单向的,且每个路口最多被一个士兵看护),问最少需要几个士兵就可以看护所有的十字路口?解题思路:本题强调图是无环图,我们想,假如开始n个十字路口都是独立的(没有街道),那么需要n个士兵进行看护。如果有两个十字路口可以组成一条单向路,那...

zyy.cpp 的博客 297

HDU 1151 Air Raid(最小路径覆盖)

二分图匹配(匈牙利算法的DFS实现) 初始化:g[][]两边顶点的划分情况 建立g[i][j]表示i->j的有向边就可以了,是左边向右边的匹配 g没有边相连则初始化为0 uN是匹配左边的顶点数,vN是匹配右边的顶点数 调用:res=hungary();输出最大匹配数 优点:适用于稠密图,DFS找增广路,实现简洁易于理解 时间复杂度:O(VE) *******************

Dosth_Magic 858

HDU-1151(求最小覆盖路径数_二分匹配)

这道题目,还是应该看成是定理题目,自己也不能够证明够出为什么给要这么做..... 有空一定要去问问别人,当然我也会自己找课件看看的... 很好敲,, 留下代码: #include #include #include #include int N,M; int map[125][125]; int visit[125]; int link[125]; int getnum(int

李硕 876

HDU -1151 二分匹配与DAG图

题意: t组输入。每组数据第一行代表有n个城市,第二行表示有m个街道,而且这些街道都是单向的,它是一个DAG图(有向无环图),每次你派到一个城市一个机器人,它就会沿着道路走下去,你只需要用最少的机器人把所有城市都走一遍就可以了。问你最少多少个机器人 题解: 那么很显然像1->2->3->4这样的图,只需要一个机器人就可以了。我们这个时候可以利用拆点就是把{1...

weixin_30487201的博客 227

HDU 1151 Air Raid

Air Raid Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5101Accepted Submission(s): 3439 Problem Description Consider a town where ...

weixin_30794499的博客 82

匈牙利算法-最大二分匹配

匈牙利算法,是求最大匹配的一种显而易见的算法是:先找出全部匹配,然后保留匹配数最多的。但是这个算法的复杂度为边数的指数级函数。因此,需要寻求一种更加高效的算法。 增广路也称增广轨或交错轨: 若P是图G中一条连通两个未匹配顶点的路径,并且属M的边和不属M的边(即已匹配和待匹配的边)在P上交替出现,则称P为相对于M的一条增广路径。(M为一个匹配) 由增广路的定义可以推出下述三个结论: 1.P的路

兵临城下 2165

HDU、二分匹配、最大匹配/新增1005+1008代码】总结

[size=large]KIDx 的解题报告[/size] [b][size=medium] 给出基本定义:[/size][/b] [img]http://dl.iteye.com/upload/attachment/541428/1c106da9-bee0-3fe7-87fb-42e3409f4562.png[/img] [img]http://dl.iteye.com/upload/a...

基德KID.1412 201

二分匹配算法

目录学习篇二分图以及其最大匹配匈牙利算法二分图最大匹配变形题最小顶点覆盖 || 最大独立集DAG图的最小路径覆盖水题集hdu 2063:男女最大匹配hdu 1150:机器最少重启次数hdu 1151:DAG最小覆盖路1068:最大没有联系的男女个数hdu 1281 :骑士最大放置数 学习篇 二分图以及其最大匹配 一、什么是二分图 如果一个图的顶点可以分为两个集合X、Y, 图的所有边一定是有一个顶点属于集合X,另一个顶点属于集合Y, 则称该图为“二分图”或“二部图”。 二、二分图的最大匹配 在二分图的应用中,

weixin_52723996的博客 1271

poj 1422 二分图最小路径覆盖

二分图最小路径覆盖==点数n--二分图最大匹配,,,知道了这个公式,,又是一道水题。。。二分图方面的题,,关键是建图,把图建好了,剩下的就简单了。。。题目: Air Raid Time Limit:1000MS Memory Limit:10000K Total Submissions:4600 Accepted:2722 D...

hunxiejun 276

J - Air Raid HDU - 1151(最小路径覆盖数)

题目链接 解题思路: 裸的最小路径覆盖,不过因为时间复杂度,要把普通的二分图匹配改为hk匹配 AC代码: // Test1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // //DAG的最小路径覆盖数 = DAG图中的节点数 - 相应二分图中的最大匹配数 #include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include &l

trouble_的博客 196

hdu 1151 Air Raid(DAG有向无环图 最小路径覆盖+二分图最大匹配Hungarian)

Problem Description Consider a town where all the streets are one-way and each street leads from one intersection to another. It is also known that starting from an intersection and walking through town’s streets you can never reach the same intersection i

Jacob0824的博客 563

HDU 1151 Air Raid

目录知识点:二分匹配、贪心、思维题目输入输出样例输入输出题意思路代码 知识点:二分匹配、贪心、思维 题目 Consider a town where all the streets are one-way and each street leads from one intersection to another. It is also known that starting from an intersection and walking through town’s streets you can ne

夏午Sharve的博客? 281

hdu 1151 最小路径覆盖数 = n - 最大匹配数

题意:n个点m条边的有向无环图,每个点走一次,问最小沿着图走几次可以遍历每个点。 题解:最小路径覆盖数 1.有向图求最大匹配数,最小路径覆盖数 = n - 最大匹配数。 2.套用匈牙利算法的模板即可。 #include&lt;stdio.h&gt; #include&lt;string.h&gt; #include&lt;stdio.h&gt; #include&lt;math.h&gt...

Irving0323的博客 355

HDU1151 Air Raid【二分图 最小路径覆盖】

Air Raid Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6562    Accepted Submission(s): 4357   Problem Description Consider a town where al...

逐梦者 282

全覆盖路径规划算法(CCPP)

1.基本概念 CCPP: Complete Coverage Path Planning CCPP需解决的关键问题: 遍历工作区域内除障碍物以外的全部区域 在遍历过程中有效避开所有障碍物 在遍历过程中要尽量避免路径重复,缩短移动距离 CCPP技术指标: 区域覆盖率 路径重复率 总行程 死区:是指它的周边相邻区域,或者是边界,或者是障碍物,或者是已覆盖过的区域 全覆盖路径规划问题本质:在栅格地图中,全覆盖路径规划问题就演变为寻找机器人的下一个移动位置,只有准确找出了该位置

木牛的博客 8744

ZOJ 1525(最小路径覆盖)

Air RaidTime Limit: 1 Second      Memory Limit: 32768 KB Consider a town where all the streets are one-way and each street leads from one intersection to another. It is also known that starting from an intersection and walking through town's streets you

-- bird -- 1009
上一篇: hdu 1130 卡特兰数列
下一篇: 九余数定理及证明 hdu 1163
QZQmmmm
博客等级 码龄11年 77粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值