HDOJ 1151 Air Raid
2012-07-05 22:32
253 查看
题意:有一个城镇,它的所有街道都是单行的,并且每条街道都是和两个路口相连。同时已知街道不会形成回路。现在要弄一些伞兵去巡查这个城镇,伞兵只能沿着路的方向走,你的任务是编写程序求最小数量的伞兵,使这些伞兵可以访问(visit)所有的路口。对于伞兵的起始降落点不做限制。
其实就是给一个m个点n条边的有向无环图,求该图的最小路径覆盖。
最小路径覆盖数=顶点数-最大匹配数。
其实就是给一个m个点n条边的有向无环图,求该图的最小路径覆盖。
最小路径覆盖数=顶点数-最大匹配数。
#include<iostream> #include<string.h> using namespace std; #define MAXN 150 int match[MAXN]; bool mark[MAXN],map[MAXN][MAXN]; int n,m; bool DFS(int p) { int i,t; for( i=1; i<=m; i++){ if( !mark[i]&&map[p][i]){ mark[i]=true; t=match[i]; match[i]=p; if( t==-1||DFS(t)) return true; match[i]=t; } } return false; } int maxMah() { int ans; ans=0; memset(match,-1,sizeof(match)); for(int i=1; i<=m; i++){ memset(mark,false,sizeof(mark)); if( DFS(i)) ans++; } return ans; } int main() { int i,j,t; scanf("%d",&t); while( t--){ scanf("%d%d",&m,&n); memset(map,false,sizeof(map)); while( n--){ scanf("%d%d",&i,&j); map[i][j]=true; } printf("%d\n",m-maxMah()); } return 0; }
相关文章推荐
- HDOJ 1151 ——Air Raid 二分图匹配
- ACM HDOJ 1151 (Air Raid)
- HDOJ 1151 Air Raid
- HDOJ 1151 Air Raid
- hdoj 1151 Air Raid
- [HDOJ1151]Air Raid(最小路径覆盖,匈牙利算法)
- hdu/hdoj 1151 Air Raid
- HDOJ---1151 Air Raid[匈牙利算法:最小路径覆盖数=原图顶点数–二分图最大匹配数]
- poj 1422&&hdoj 1151 Air Raid
- hdoj 1151 Air Raid
- HDOJ 题目1151 Air Raid(二分图,最小路径覆盖)
- hdoj 1151 Air Raid
- HDOJ 1151 Air Raid
- hdoj 1151 Air Raid
- hdoj--1151--Air Raid(最大独立集)
- hdoj--1151--Air Raid(最大独立集)
- HDOJ 1151 Air Raid(二分图最小路径覆盖)
- hdu 1151 Air Raid - 二分匹配
- hdu 1151 Air Raid (二分匹配)
- Air Raid HDU - 1151 最小路径覆盖