POJ1422-Air Raid(最小路径覆盖)
来源:互联网 发布:淘宝排名前十的店铺 编辑:程序博客网 时间:2024/06/04 18:59
题目链接
题意:给定一个有向图,问最少放多少个伞兵,使得所有路口都能被走到,所有路口有且只被走到一次。
思路:二分图的最小路径覆盖。
在一个 N*N 的有向图中,路径覆盖就是在图中找一些路经,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联;(如果把这些路径中的每条路径从它的起始点走到它的终点,那么恰好可以经过图中的每个顶点一次且仅一次);如果不考虑图中存在回路,那么每每条路径就是一个弱连通子集.
由上面可以得出:
1.一个单独的顶点是一条路径;
2.如果存在一路径 p1,p2,......pk,其中 p1 为起点,pk 为终点,那么在覆盖图中,顶点 p1,p2,......pk 不再与其它的顶点之间存在有向边.
最小路径覆盖就是找出最小的路径条数,使之成为 G 的一个路径覆盖.
路径覆盖与二分图匹配的关系:最小路径覆盖=|G|-最大匹配数;
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <algorithm>using namespace std;const int MAXN = 1005;vector<int> g[MAXN];int linker[MAXN];bool used[MAXN];int n, m;bool dfs(int u) { for (int i = 0; i < g[u].size(); i++) { int v = g[u][i]; if (!used[v]) { used[v] = true; if (linker[v] == -1 || dfs(linker[v])) { linker[v] = u; return true; } } } return false;}int save[MAXN];int hungary() { int res = 0; memset(linker, -1, sizeof(linker)); for (int u = 1; u <= n; u++) { memset(used, false, sizeof(used)); if (dfs(u)) res++; } return res;}int main() { int cas; scanf("%d", &cas); while (cas--) { scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) g[i].clear(); int u, v; for (int i = 0; i < m; i++) { scanf("%d%d", &u, &v); g[u].push_back(v); } printf("%d\n", n - hungary()); } return 0;}
0 0
- poj1422 zoj1525 Air Raid 最小路径覆盖
- POJ1422 Air Raid 【DAG最小路径覆盖】
- POJ1422-Air Raid(最小路径覆盖)
- 最小路径覆盖 poj1422 Air Raid
- Air Raid POJ1422 & HDU1151 最小路径覆盖
- POJ1422 Air Raid【二分图最小路径覆盖】
- poj1422 Air Raid 最小路径覆盖=顶点数-最大匹配数
- POJ1422——Air Raid(二分图,最小路径覆盖)
- poj1422-最小路径覆盖(不交叉)&二分图-Air Raid
- POJ1422.Air Raid(空袭)——最小边覆盖
- poj1422最小路径覆盖
- poj1422最小路径覆盖
- POJ1422 最小路径覆盖
- zju 1525 Air Raid(最小路径覆盖)
- [POJ]1422-Air Raid(最小路径覆盖)
- hdu Air Raid(最小路径覆盖)
- poj 1422Air Raid--最小路径覆盖
- hdu 1151 Air Raid最小路径覆盖
- 爱的药方
- Visual Studio中最常用的13个快捷键
- Failure [INSTALL_FAILED_OLDER_SDK] Android-L, Android Studio.
- 利用Git来搭建自己的博客平台
- Python脚本如何生成Windows可执行文件.exe
- POJ1422-Air Raid(最小路径覆盖)
- FTP乱码的解释
- 单例设计模式
- 击中击不中变换Matlab实现
- c++虚函数和虚继承
- Flex+Java+Blazeds
- OC中继承子类对象调用方法机制 子类对象访问父类中的实例变量
- phonegap 搭建ios 修改index.html地址
- C#抽象类、接口、虚函数和抽象函数