hdu 1151 Air Raid最小路径覆盖
来源:互联网 发布:网络推广员培训经历 编辑:程序博客网 时间:2024/05/21 15:06
题目的意思就是:
一个=城镇中有n个路口和m条单项的路径,图是无环图,现在要派一些伞兵去这些成寿寺,要到达所有的路口;
有一些或者没有伞兵可以不去那些路口,只要其他人能完成这么任务;
每个在一个路口着陆了的伞兵可以沿着街去到其他路口;
我们的任务就是求出去执行任务的伞兵最少可以使几个;
这个问题是二分图的最小路径覆盖问题;
而路径覆盖的定义就是:
在有向图中找一些路径,使之覆盖了图中的所有顶点,就是任意一个顶点都跟那些路径中的某一条关联,且任何一个顶点
有且只有一个与之关联;一个单独的顶点是一跳路径……最小路径覆盖就是最少的路径覆盖数。
最小路径覆盖=图的顶点数-最大匹配数
代码:
#include<cstdio>#include<string>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>using namespace std;int map[121][121];int link[121];int vis[121];int n,m;int find(int k){for(int i=1;i<=n;i++)if(!vis[i]&&map[k][i]){vis[i]=1;if(link[i]==-1||find(link[i])){link[i]=k;return 1;}}return 0;}int hug(){//最大匹配数int ans=0;memset(vis,0,sizeof(vis));memset(link,-1,sizeof(link));for(int i=1;i<=n;i++){if(find(i))ans++;}return ans;}int main(){int u,v,t,ans;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);memset(map,0,sizeof(map));for(int i=0;i<m;i++){scanf("%d%d",&u,&v);map[u][v]=1;}ans=n-hug();printf("%d\n",ans);}return 0;}
- hdu 1151 Air Raid最小路径覆盖
- hdu 1151 Air Raid (最小路径覆盖)
- HDU 1151 Air Raid( 最小路径覆盖 )
- hdu 1151 Air Raid ( 最小路径覆盖 )
- Air Raid hdu 1151 最小路径覆盖
- [hdu 1151] Air Raid(最小路径覆盖)
- HDU 1151 Air Raid 最小路径覆盖
- HDU 1151 Air Raid【最小路径覆盖】
- HDU 1151 Air Raid (最小路径覆盖)
- HDU 1151 Air Raid( 最小路径覆盖)
- [HDU 1151] Air Raid 最小路径覆盖
- hdu 1151 Air Raid 最小路径覆盖
- hdu 1151 Air Raid【最小路径覆盖】
- HDU- 1151 Air Raid(最小路径覆盖)
- hdu Air Raid(最小路径覆盖)
- HDU Air Raid 最小路径覆盖
- HDU 1151 Air Raid(最小路径覆盖)
- hdu 1151 Air Raid(最小路径覆盖)
- codeforces 214A
- iOS手势
- VC 文档+视图 详细分析
- 20121230 电脑 for_i3 2130
- 单件模式的几种实现方法
- hdu 1151 Air Raid最小路径覆盖
- LDD读书笔记——调试技术
- jquerymobile-2 多个页面一个文件
- jquery 表单提交的注意点
- jquery 表格(radio)
- C++运算符的重载
- log4j配置(下)
- 回首2012
- log4j配置(上)