POJ 1422 - Air Raid(二分图匹配)
来源:互联网 发布:php判断是否微信打开 编辑:程序博客网 时间:2024/05/16 19:08
题目:
http://poj.org/problem?id=1422
题意:
n个点m条边,求出最少数量的伞兵,使得这些伞兵能访问所有的路口。
思路:
二分图, 最小路径覆盖. 一个重要定理: 最小路径覆盖数 = 节点数-最大匹配数 = 最大独立集。
使用拆点法。若有边<u,v,>,则构造一条边<u,v'>,得到一个二分图,其最大匹配相当于原图中的最小路径覆盖的边数,那么原图的最小路径覆盖数 = 节点数-覆盖边数(最大匹配数)。
AC.
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn = 125;int g[maxn][maxn], linker[maxn];bool used[maxn];int n;bool dfs(int u){ for(int v = 0; v < n; ++v) { if(g[u][v] && !used[v]) { used[v] = 1; if(linker[v] == -1 || dfs(linker[v])) { linker[v] = u; return true; } } } return false;}int hungary(){ int res = 0; memset(linker, -1, sizeof(linker)); for(int u = 0; u < n; ++u) { memset(used, 0, sizeof(used)); if(dfs(u)) res++; } return res;}int main(){ //freopen("in", "r", stdin); int T; scanf("%d", &T); while(T--) { int m; scanf("%d", &n); scanf("%d", &m); memset(g, 0, sizeof(g)); for(int i = 0; i < m; ++i) { int u, v; scanf("%d %d", &u, &v); u--; v--; g[u][v] = 1; } int ans = hungary(); printf("%d\n", n - ans); } return 0;}
0 0
- POJ 1422 - Air Raid(二分图匹配)
- POJ 1422 Air Raid (二分匹配)
- poj 1422 Air Raid (二分图匹配)
- POJ - 1422 Air Raid 二分图最大匹配
- 【图论】【二分图匹配】[POJ 1422]Air Raid
- 【二分图】 poj 1422 Air Raid
- poj 1422 Air Raid 最小二分匹配 基础
- POJ 1422 Air Raid 最小路径覆盖(二分图匹配)
- poj 1422 Air Raid(最小路径覆盖 + 二分图最大匹配)
- POJ 1422Air Raid(二分图最大匹配之最小路径覆盖)
- POJ 1422 Air Raid(二分图匹配最小路径覆盖)
- hdu 1151 &&poj 1422 Air Raid (二分图匹配 最小路径覆盖)
- poj 1422 Air Raid 最小路径覆盖 二分图匹配 解题报告
- POJ 1422 Air Raid(二分图匹配+最小路径覆盖+匈牙利算法)
- hdu 1151 Air Raid 二分图匹配
- POJ-1422-Air Raid (二分图 最小路径覆盖)
- 【二分图|最小路径覆盖】POJ-1422 Air Raid
- Air Raid(二分匹配)
- [Java]Leetcode165 Compare Version Numbers
- 时间区间重叠判断&union&jxl合并单元格
- 往osgOcean中添加自己的模型——海底捞针,找模型
- 用Dijkstra算法求解无向图的最短路径
- App推广干货:一个新的App该如何推广
- POJ 1422 - Air Raid(二分图匹配)
- 改变input标签中placeholder显示的颜色
- SQL语句常用优化技巧(一)
- python执行mapreduce
- Storm 32位(伪分布)
- 黑马程序员——GUI 编程学习
- 垃圾回收机制
- 20150415,微软4月15日发布11个安全补丁
- 【Launcher2源码解读】Launcher启动和加载