HDU 1151 - Air Raid
Posted nicetomeetu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 1151 - Air Raid相关的知识,希望对你有一定的参考价值。
很明显求最小路径覆盖
就是求最大匹配
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <vector> 5 using namespace std; 6 const int maxn=200; 7 vector<int> map[maxn]; 8 int vis[maxn]; 9 int link[maxn]; 10 int n,k; 11 bool dfs(int t) 12 { 13 int i,x,size=map[t].size(); 14 for(i=0;i<size;++i) 15 { 16 x=map[t][i]; 17 if(!vis[x]) 18 { 19 vis[x]=1; 20 if(link[x]==-1||dfs(link[x])) 21 { 22 link[x]=t; 23 return 1; 24 } 25 } 26 } 27 return 0; 28 } 29 int main() 30 { 31 int i,a,b,ans,t; 32 scanf("%d",&t); 33 while(t--) 34 { 35 scanf("%d%d",&n,&k); 36 for(i=1;i<=n;++i) map[i].clear(); 37 for(i=1;i<=k;++i) 38 { 39 scanf("%d%d",&a,&b); 40 map[a].push_back(b); 41 } 42 memset(link,-1,sizeof(link)); 43 ans=0; 44 for(i=1;i<=n;++i) 45 { 46 memset(vis,0,sizeof(vis)); 47 if(dfs(i)) ans++; 48 } 49 printf("%d\n",n-ans); 50 } 51 }
以上是关于HDU 1151 - Air Raid的主要内容,如果未能解决你的问题,请参考以下文章