HDU1054Strategic Game(最小顶点覆盖数)
我们来先了解一下什么是最小顶点覆盖;
图G的顶点覆盖是一个顶点集合V,使得G中的每一条边都接触V中的至少一个顶点。我们称集合V覆盖了G的边。最小顶点覆盖是用最少的顶点来覆盖所有的边。顶点覆盖数是最小顶点覆盖的大小。
相应地,图G的边覆盖是一个边集合E,使得G中的每一个顶点都接触E中的至少一条边。
如果只说覆盖,则通常是指顶点覆盖,而不是边覆盖。
在二分图中 :最大匹配数=最小顶点覆盖数;
求二分图最大匹配可以用最大流(Maximal Flow)或者匈牙利算法(Hungarian Algorithm)
所以下面介绍主要一下匈牙利算法:
匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。
匈牙利算法之前还是先提一下几个概念,下面M是G的一个匹配。
匹配的一种
显而易见的算法是:先找出全部匹配,然后保留匹配数最多的。但是这个算法的
时间复杂度为边数的指数级
函数。因此,需要寻求一种更加高效的算法。下面介绍用
增广路求最大
匹配的方法(称作
匈牙利算法,
匈牙利
数学家Edmonds于1965年提出)。
增广路的定义可以推出下述三个结论:
匹配M’。
增广路径为止
题意:
鲍勃喜欢玩电脑游戏,特别是战略游戏,但有时他无法找到解决方案,速度不够快,那么他很伤心。
现在,他有以下的问题。
他必须捍卫一个中世纪的城市,形成了树的道路。
他把战士的最低数量的节点上,使他们可以观察所有的边。
你能帮助他吗?
士兵,鲍勃把一个给定的树,你的程序应该发现的最小数目。
输入文件包含多个数据集的文本格式。
题解:可以用匈牙利算法求解;用stl模版中的向量容器存放双向邻接表;
注意:1.本题中编号是从0开始;所以ret[]应初始化为-1;
2:向量要清零;
代码实现:
#include<stdio.h>
#include<cstring>
#include<vector>
using namespace std;
#pragma comment(linker,"/STACK:102400000,102400000")
#define MAX 1505
int visit[MAX];//标记节点是否被访问过;
int ret[MAX];//标记n个节点的增广节点的编号
vector<int>map[MAX];//用stl模版中的向量存放邻接表
int find(int cur )//找增广路径
{
for(int i=0;i<map[cur].size();i++)
{
int j=map[cur][i];
if(!visit[j])//若j与cur相邻,且没有被标记
{
visit[j]=1;
if(ret[j]==-1||find(ret[j]))//如果j未在前一个匹配M中,或者,j在匹配M中,但从j相邻的节点出发可以找到增广路
{
ret[j]=cur;//则把cur放到匹配M中;
return 1;
}
}
}
return 0;
}
int main()
{
// freopen("input.txt","r",stdin);
int n,x,m,y;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)map[i].clear();//注意要清零;
for(int i=0;i<n;i++)
{
scanf("%d:(%d)",&x,&m);
for(int j=0;j<m;j++)
{
scanf("%d",&y);
map[x].push_back(y);//用向量存放双向邻接表
map[y].push_back(x);
}
}
int sum=0;
memset(ret,-1,sizeof(ret));//因为节点从0开始,所以要赋值为-1;
for(int i=0;i<n;i++)//
{
memset(visit,0,sizeof(visit));
sum+=find(i);//若有增广路,匹配数则加一
}
printf("%d\n",sum/2);//最小顶点覆盖 == 最大匹配(双向图)/2;
}
return 0;
}
HDU1054Strategic Game(最小顶点覆盖数)的更多相关文章
- poj3041-Asteroids , 二分图的最小顶点覆盖数 = 最大匹配数
点击打开链接 Konig定理:二分图的最小顶点覆盖数 = 二分图的最大匹配数 题意: 在N*N的网络中有K颗小行星.小行星i的位置是(Ri, Ci).如今有一个强力的武器可以用一发光束将一整行或一整列 ...
- Ural 1109 Conference(最小路径覆盖数)
题意:A国家有M个代表,B国有N个代表,其中有K对代表可以进行谈判(一个是A国的,一个是B国的),并且每一个代表至少被包含在其中一对中(也就是说,每个人可以至少找到另外一个人谈判),每一对谈判需要一对 ...
- POJ - 1422 Air Raid(DAG的最小路径覆盖数)
1.一个有向无环图(DAG),M个点,K条有向边,求DAG的最小路径覆盖数 2.DAG的最小路径覆盖数=DAG图中的节点数-相应二分图中的最大匹配数 3. /* 顶点编号从0开始的 邻接矩阵(匈牙利算 ...
- HDU -1151 二分匹配与有向无环图不相交最小路径覆盖数
题意: 考虑一个小镇,那里的所有街道都是单向的,并且每条街道都从一个路口通往另一个路口.还众所周知,从一个十字路口开始,穿过城镇的街道,您将永远无法到达同一十字路口,即,城镇的街道没有环. 基于这些假 ...
- 50 years, 50 colors HDU - 1498(最小点覆盖或者说最小顶点匹配)
On Octorber 21st, HDU 50-year-celebration, 50-color balloons floating around the campus, it's so nic ...
- NBUT 1635 Explosion(最小顶点覆盖)
[1635] Explosion 时间限制: 10000 ms 内存限制: 65535 K 问题描述 there is a country which contains n cities connec ...
- hdu1054最小顶点覆盖
最小定点覆盖是指这样一种情况: 图G的顶点覆盖是一个顶点集合V,使得G中的每一条边都接触V中的至少一个顶点.我们称集合V覆盖了G的边.最小顶点覆盖是用最少的顶点来覆盖所有的边.顶点覆盖数是最小顶点覆盖 ...
- HDU 3360 National Treasures(最小点覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3360 题目大意: 在一个n*m的格子中,每个格子有一个数值,-1表示空,其余表示财宝.每个财宝的数值转 ...
- poj3041 Asteroids(二分图最小顶点覆盖、二分图匹配)
Description Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape o ...
随机推荐
- Xcode更改配色方案
更改配色方案:Xcode > PReferences > Fonts & Color /********************************************** ...
- Android使用百度地图API实现GPS步行轨迹
百度地图Android SDK下载:http://developer.baidu.com/map/sdkandev-download.htm 下面是效果: 采样点取得太频繁所以看起来像是一个个点... ...
- Linux 查看某个用户的进程
Linux 查看某个用户的进程 To view only the processes owned by a specific user, use the following command: top ...
- 在Linux中,如何取出一个字符串的前5位
问: 在Linux中,如何取出一个字符串的前5位? 常用的一些方法如下: [tough@toughhou ~]$ str=abcdef [tough@toughhou ~]$ echo $str ab ...
- Oracle数据库间的数据复制 - SQLPlus中的COPY命令
Copy命令可以实现不同Oracle数据库间的数据的复制,也是可以实现同一数据库的数据复制,其性能表现和导入/导出相同. 根据9i文档,说Copy命令未来会不支持,但实际上Oracle 11g仍然支持 ...
- 【css】 收藏 纯css打造 mackbook air
http://www.cnblogs.com/myvin/p/4621231.html <html lang="en"> <head> <meta c ...
- JS 实现取整(二)
1.直接丢弃小数部分,保留整数部分 a:parseInt(1.5555) b: 0|1.5555 2.向上取整 a: Math.ceil(1.5555) b: (1.5555+0.5).toFixed ...
- XSS前端防火墙
前一段时间,在EtherDream大神的博客里看到关于XSS防火墙的一系列文章,觉得很有意思.刚好科创要做一个防火墙,就把XSS前端防火墙作为一个创新点,着手去实现了. 在实现过程中,由于各种原因,比 ...
- 线形,柱形,条形数据表(百度Echart插件)
[获取资源]进入官网, http://echarts.baidu.com/导航,下载,下拉框下载,常用303k.就是这么简单,就个一个js.[项目使用]新建项目,MyChart具体使用的过程中, ...
- WdatePicker 设置开始时间和结束时间
开始时间: <input type="text" placeholder=" -请选择- " readonly="readonly" ...