(匹配 最小路径覆盖)Air Raid --hdu --1151
链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1151
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82834#problem/J
/* **************************************************************************
//二分图匹配(匈牙利算法的DFS实现)
//初始化:G[][]两边顶点的划分情况
//建立G[i][j]表示i->j的有向边就可以了,是左边向右边的匹配
//G没有边相连则初始化为0
//uN是匹配左边的顶点数,vN是匹配右边的顶点数
//调用:res=hungary();输出最大匹配数
//优点:适用于稠密图,Find找增广路,实现简洁易于理解
//时间复杂度:O(VE)
//顶点编号从0开始的
//************************************************************************** */
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 205
#define INF 0x3f3f3f3f int n, m, un, vn, G[N][N], used[N], p[N]; int Find(int u)
{
for(int i=; i<vn; i++)
{
if(G[u][i] && !used[i])
{
used[i] = ;
if(p[i]==- || Find(p[i]))
{
p[i] = u;
return ;
}
}
}
return ;
} void hungary()
{
int ans = ;
memset(p, -, sizeof(p)); for(int i=; i<un; i++)
{
memset(used, , sizeof(used));
if(Find(i)) ans++;
} printf("%d\n", n-ans);
} int main()
{
int t;
scanf("%d", &t);
while(t--)
{
int i, u, v; scanf("%d%d", &n, &m); memset(G, , sizeof(G));
for(i=; i<=m; i++)
{
scanf("%d%d", &u, &v);
u--, v--;
G[u][v] = ;
}
un = vn = n; hungary();
}
return ;
}
最小顶点覆盖:在二分图中寻找一个尽量小的点集,使图中每一条边至少有一个点在该点集中。
最小顶点覆盖 == 最大匹配。
反证法证明:假设当前存在一条两个端点都不在最小顶点覆盖点集中,那么这么光芒四射的边定可以增大最大匹配边集,与最大匹配矛盾,所以得证。
最小路径覆盖:在二分图中寻找一个尽量小的边集,使图中每一个点都是该边集中某条边的端点。
最小路径覆盖 == 顶点数 - 最大匹配。
证明:因为一条边最多可以包含两个顶点,所以我们选边的时候让这样的边尽量多,也就是说最大匹配的边集数目咯。剩下的点就只能一个边连上一个点到集合里啦。
最大独立集:在N个点中选出来一个最大点集,使这个点集中的任意两点之间都没有边。
最大独立集 == 顶点数 - 最大匹配。
证明:因为去掉最大匹配两端的顶点去掉以后,剩下的点肯定是独立集。我们再从每个匹配里面挑选出来一个点加入到独立集中,也是不会破坏原有独立集的独立性的。
(匹配 最小路径覆盖)Air Raid --hdu --1151的更多相关文章
- hdu1151 二分图(无回路有向图)的最小路径覆盖 Air Raid
欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Air Raid Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
- POJ 3020 Antenna Placement【二分匹配——最小路径覆盖】
链接: http://poj.org/problem?id=3020 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
- POJ 1422 Air Raid(二分图匹配最小路径覆盖)
POJ 1422 Air Raid 题目链接 题意:给定一个有向图,在这个图上的某些点上放伞兵,能够使伞兵能够走到图上全部的点.且每一个点仅仅被一个伞兵走一次.问至少放多少伞兵 思路:二分图的最小路径 ...
- POJ-1422 Air Raid---二分图匹配&最小路径覆盖
题目链接: https://vjudge.net/problem/POJ-1422 题目大意: 有n个点和m条有向边,现在要在点上放一些伞兵,然后伞兵沿着图走,直到不能走为止 每条边只能是一个伞兵走过 ...
- Air Raid HDU 1151
题意 给定n个路口 加上一些单向路 求遍历完所有路口需要多少人 人是空降的 哪里都可以作为起点 求 最小边覆盖 (用最少的边覆盖所有的点) 也叫最小路径覆盖(更形象) 也叫二分图的最大独立集 ...
- UVA 1201 - Taxi Cab Scheme(二分图匹配+最小路径覆盖)
UVA 1201 - Taxi Cab Scheme 题目链接 题意:给定一些乘客.每一个乘客须要一个出租车,有一个起始时刻,起点,终点,行走路程为曼哈顿距离,每辆出租车必须在乘客一分钟之前到达.问最 ...
- POJ-3020 Antenna Placement---二分图匹配&最小路径覆盖&建图
题目链接: https://vjudge.net/problem/POJ-3020 题目大意: 一个n*m的方阵 一个雷达可覆盖两个*,一个*可与四周的一个*被覆盖,一个*可被多个雷达覆盖问至少需要多 ...
- J - Air Raid - hdu 1151(最小边覆盖)
题意:给一个有向无环图,求出来最少需要几个士兵可以遍历所有的边. 分析:有向无环图的最小边覆盖 = 点数 - 最大匹配数 为什么是这样的公式??可以思考一下,如果这N个点之间没有边,是不是应该有N个士 ...
- POJ3020 二分图匹配——最小路径覆盖
Description The Global Aerial Research Centre has been allotted the task of building the fifth gener ...
随机推荐
- 利用 setInterval 确定用户的动作是否停止
最近遇到一个问题,对于某一个持续的动作,希望能够知晓用户何时停止这个动作, 比如说 我们通过注册onresize事件,去监听浏览器窗口变化的事件,在这个事件里面,我们可能要执行大量的计算去确定窗口变化 ...
- 如何将int整型转换成String字符串类型
自动类型转换适用于兼容类型之间从小范围到大范围数据的转换. nt转换成String int i = 10; int b=1: System.out.pritnln(a + b); 里面靠近字符串,所以 ...
- 全屏幕显示AVI
uses Unit2; procedure TForm1.Button1Click(Sender: TObject);begin Form2.Show; Form2.WindowState := ...
- c++实现贪食蛇
今天老师布置了作业 让我们观察c++实现贪食蛇的代码 #include<windows.h> #include<time.h> #include<stdlib.h> ...
- eclipise快捷键,留给以后备用
快捷键无效解决办法: 1.考虑是否被其他应用占用,如QQ,QQ音乐,千千动听等 2.在eclispe查看是否被修改:Window->Preferences->General->Key ...
- 信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:
问题信息详细: 信息: The APR based Apache Tomcat Native library which allows optimal performance in productio ...
- [leetcode]257. Binary Tree Paths二叉树路径
Given a binary tree, return all root-to-leaf paths. Note: A leaf is a node with no children. Example ...
- 解决lhgDialog插件在IE11浏览器的BUG
项目中用到一款lhgDialog插件,最近在Win7系统IE11浏览器打上最新补丁(KB4012204)后,对话框内容的高度变成默认高度,经过调试,修改了lhgDialog里的iframe高度,问题解 ...
- PAT 1065 单身狗(25)(STL-map+思路+测试点分析)
1065 单身狗(25 分) "单身狗"是中文对于单身人士的一种爱称.本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱. 输入格式: 输入第一行给出一个正整数 N(≤ ...
- 用Notepad++在文本文件里快速在每行头尾都加上指定的内容(转载)