hdu 1151 最小覆盖路径算法证明
2015-11-29 10:09
344 查看
又是二分图。若还不知道匈牙利算法,看我前面的文章
先把每个点拆成两个,一个表示出,一个表示入,根据数据输入,对应的出点和对应入点之间构造了一条边。这样就有了一个二分图。
有向图的最小路径覆盖 = 总的点数(为拆分前的) - 最大匹配数。
证明如下:
先假设所有点我们都派出一个伞兵。然后每增加一条匹配,就代表我们从一个点出走向一个点。并且根据最大匹配的定义,我们可以直接看作是将这两个点合并到一个路径集合中,这个时候我们就可以减少一个伞兵。 所以 路径覆盖 = 总的点数 - 最大匹配数 。
然而这样我们并没有证明 是 “最小”覆盖。 接下来证明最小。 假设 不是最小,那么也就意味着还可以减少伞兵,而减少伞兵就必须合并某两个点(即匹配),而匹配已经最大,所以矛盾。
即 需要派遣的伞兵数 = 总点数 - 匹配数。 最少伞兵派遣 = 总点数 - 最大匹配数。
先把每个点拆成两个,一个表示出,一个表示入,根据数据输入,对应的出点和对应入点之间构造了一条边。这样就有了一个二分图。
有向图的最小路径覆盖 = 总的点数(为拆分前的) - 最大匹配数。
证明如下:
先假设所有点我们都派出一个伞兵。然后每增加一条匹配,就代表我们从一个点出走向一个点。并且根据最大匹配的定义,我们可以直接看作是将这两个点合并到一个路径集合中,这个时候我们就可以减少一个伞兵。 所以 路径覆盖 = 总的点数 - 最大匹配数 。
然而这样我们并没有证明 是 “最小”覆盖。 接下来证明最小。 假设 不是最小,那么也就意味着还可以减少伞兵,而减少伞兵就必须合并某两个点(即匹配),而匹配已经最大,所以矛盾。
即 需要派遣的伞兵数 = 总点数 - 匹配数。 最少伞兵派遣 = 总点数 - 最大匹配数。
#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); } }
相关文章推荐
- 在程序里设置加载网页
- 【cocos2dx】quick cocos2dx 3.5 节点层级太深就会就开始卡
- java基础随笔
- Human Motion Analysis: A Review理解
- 通用javascript代码判断版本号是否在版本范围之间
- java修饰符
- java 俄罗斯方块02
- 前端css编码规范
- [LeetCode]Binary Tree Paths
- C#开篇
- 探索软件智能高效自动化网络管理的规律
- Codeforces 598D Igor In the Museum(概率DP)
- 求助Syntax error, insert "}" to complete
- Win7\xp添加虚拟网Microsoft Loopback Adapter
- jQuery如何使用自动触发事件trigger
- HDU 5587 Array(位运算)——BestCoder Round #64(div.1 div.2)
- 实验二-固件设计 20135211李行之 20135216刘蔚然
- Java图形界面编程学习笔记(一)
- 黑马程序员—Java基础知识汇总
- GNU Radio中流图的动态配置