【線性規劃與網路流24題 1】飛行員配對方案
description
第二次世界大戰時期,英國皇家空軍從淪陷國徵募了大量外籍飛行員。由皇家空軍派出的每一架飛機都需要配備在航行技能和語言上能互相配合的2 名飛行員,其中1 名是英國飛行員,另1 名是外籍飛行員。在眾多的飛行員中,每一名外籍飛行員都可以與其他若干名國飛行員很好地配合。如何選擇配對飛行的飛行員才能使一次派出最多的飛機。對於給定的外籍飛行員與英國飛行員的配合情況,試設計乙個演算法找出最佳飛行員配對方案,使皇家空軍一次能派出最多的飛機。
對於給定的外籍飛行員與英國飛行員的配合情況,程式設計找出乙個最佳飛行員配對方案,使皇家空軍一次能派出最多的飛機。
由於本oj無special judge , 所以只需要輸出最多能派出的飛機數
input
第1 行有2個正整數m和n。n是皇家空軍的飛行員總數(n<100);m是外籍飛行員數。外籍飛行員編號為1~m;英國飛行員編號為m+1~n。
接下來每行有2 個正整數i和j,表示外籍飛行員i可以和英國飛行員j配合。
最後以2個-1 結束。
output
程式執行結束時,將最佳飛行員配對方案輸出。第 1 行是最佳飛行員配對方案一次能派出的最多的飛機數 m。
/*接下來 m 行是最佳飛行員配對方案。
每行有 2個正整數 i和j,表示在最佳飛行員配對方案中,飛行員i和飛行員j配對。
如果所求的最佳飛行員配對方案不存在,則輸出『no solution!』 。
配對方案按照字典序輸出*/
sample input
5 10sample output1 71 8
2 62 9
2 10
3 73 8
4 74 8
5 10
-1 -1
4/*1 7
2 93 8
5 10
*/
這個題:
典型的二分圖最大匹配,求匹配數和匹配方案的問題!
用經典hungary()模板可以得到最大匹配數
然後,遍歷linker陣列,如果不等於初始化的值,說明連過線,將其輸出即可
hungary()演算法的思路:
首先給我自己節點u找到乙個可以匹配的v
如果v沒有被匹配過,則增加乙個匹配對(u,v)
**:for(int v=0;v
否則,可以看看v是不是可以被其他的替代一下,換個人去匹配u0,重組一下匹配關係用dfs去找,能否增加乙個新的匹配
linker【v】:當前已經匹配的v,連的是哪乙個
**如下:
//#include#include#include#include#includeusing namespace std;
const int maxn=2000;
int un,vn;
int g[maxn][maxn];
int linker[maxn];
bool used[maxn];
bool dfs(int u){
for(int v=0;v
線性規劃與網路流24題 01飛行員配對方案問題
答案不唯一。所以可能直接測會是錯誤的。飛行員配對方案問題 include include includeusing namespace std define inf 1 30 define maxn 10000 struct node edge maxn int head 1000 p,lev 10...
網路流24題 搭配飛行員
題目 洛谷p2756 tips 兩處的輸出格式不同,提交時注意輸出格式233 解法題目其實是一道二分圖匹配 匈牙利水過 考慮網路流建模。建立兩點超源 s s 超匯t role presentation style position relative t t,對於搭配,若 u u 與v role pr...
網路流24題 搭配飛行員
飛行大隊有若干個來自各地的駕駛員,專門駕駛一種型號的飛機,這種飛機每架有兩個駕駛員,需乙個正駕駛員和乙個副駕駛員。由於種種原因,例如相互配合的問題,有些駕駛員不能在同一架飛機上飛行,問如何搭配駕駛員才能使出航的飛機最多。因為駕駛工作分工嚴格,兩個正駕駛員或兩個副駕駛員都不能同機飛行。input 第一...