51Nod 2006 飞行员配对(二分图最大匹配)-匈牙利算法
2017-07-20 23:55
190 查看
2006 飞行员配对(二分图最大匹配)
题目来源: 网络流24题
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
收藏
关注
第二次世界大战时期,英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2名飞行员,其中1名是英国飞行员,另1名是外籍飞行员。在众多的飞行员中,每一名外籍飞行员都可以与其他若干名英国飞行员很好地配合。如何选择配对飞行的飞行员才能使一次派出最多的飞机。对于给定的外籍飞行员与英国飞行员的配合情况,试设计一个算法找出最佳飞行员配对方案,使皇家空 军一次能派出最多的飞机 。对于给定的外籍飞行员与英国飞行员的配合情况,编程找出一个最佳飞行员配对方案, 使皇家空军一次能派出最多的飞机。
Input第1行有2个正整数 m 和 n。n 是皇家空军的飞行 员总数(n<100);m 是外籍飞行员数。外籍飞行员编号为 1~m;英国飞行员编号为 m+1~n。接下来每行有 2 个正整数 i 和 j,表示外籍飞行员 i 可以和英国飞行员 j 配合。输入最后以 2 个-1 结束。Output
第 1 行是最佳飞行 员配对方案一次能派出的最多的飞机数 M。如果所求的最佳飞行员配对方案不存在,则输出‘No Solution!’。Input示例
5 10 1 7 1 8 2 6 2 9 2 10 3 7 3 8 4 7 4 8 5 10 -1 -1Output示例
4
#include<cstdio> #include<iostream> #include<vector> #include<cstring> using namespace std; int ans; vector<int> h[1000]; int n,m; int vis[12000]; int p[10000]; bool dfs(int x) { for(int j=0;j<h[x].size();j++) { int u=h[x][j]; if(!vis[u]) { vis[u]=1; if(!p[u]||dfs(p[u])) { p[u]=x; return true; } } } return false; } int main() { ios::sync_with_stdio(0); int u,v; cin>>m>>n; while(cin>>u>>v) { if(u==-1) break; h[u].push_back(v); } for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(dfs(i)) ans++; } if(ans) cout<<ans<<endl; else cout<<"No Solution!\n"; return 0; }
相关文章推荐
- 51nod 2006 飞行员配对(二分图最大匹配) 裸匈牙利算法 求二分图最大匹配题
- 51Nod 2006 飞行员配对(二分图最大匹配) 匈牙利算法
- 51Nod 2006:飞行员配对(二分图最大匹配,匈牙利算法)
- 51Nod 飞行员配对(二分图最大匹配)(匈牙利算法模板题)
- 【学会就脱单算法】匈牙利算法之飞行员配对问题(二分图最大匹配)
- 51Nod-2006 飞行员配对(二分图最大匹配,匈牙利算法)
- 51nod2006 飞行员配对(二分图最大匹配)匈牙利算法
- Luogu 2756 飞行员配对方案问题(二分图最大匹配)
- 用匈牙利算法求二分图的最大匹配
- 用匈牙利算法求二分图的最大匹配(转载)
- 二分图最大匹配(匈牙利算法Dfs模板)
- The Perfect Stall 完美的牛栏 二分图最大匹配,匈牙利算法
- 一、飞行员配对方案问题 [二分图的最大匹配]
- 【二分图|最大匹配】POJ-3041 Asteroids(匈牙利算法dfs、bfs版)
- 求解二分图的最大匹配的匈牙利算法---POJ 1325 Machine Schedule
- 二分图的最大匹配+完美匹配+匈牙利算法(转载)
- 【二分图最大匹配】【匈牙利算法】zoj3988 Prime Set
- 二分图最大匹配算法-匈牙利算法(Hungary)模板
- 51nod2006 飞行员配对(二分图最大匹配)
- 二分图相关概念及匈牙利算法求解最大匹配(附代码实现)