洛谷 P2756 飛行員配對方案問題

2021-09-19 17:52:35 字數 1511 閱讀 8227

第二次世界大戰時期..

英國皇家空軍從淪陷國徵募了大量外籍飛行員。由皇家空軍派出的每一架飛機都需要配備在航行技能和語言上能互相配合的2 名飛行員,其中1 名是英國飛行員,另1名是外籍飛行員。在眾多的飛行員中,每一名外籍飛行員都可以與其他若干名英國飛行員很好地配合。如何選擇配對飛行的飛行員才能使一次派出最多的飛機。對於給定的外籍飛行員與英國飛行員的配合情況,試設計乙個演算法找出最佳飛行員配對方案,使皇家空軍一次能派出最多的飛機。

對於給定的外籍飛行員與英國飛行員的配合情況,程式設計找出乙個最佳飛行員配對方案,使皇家空軍一次能派出最多的飛機。

輸入格式:

第 1 行有 2 個正整數 m 和 n。n 是皇家空軍的飛行員總數(n<100);m 是外籍飛行員數(m<=n)。外籍飛行員編號為 1~m;英國飛行員編號為 m+1~n。

接下來每行有 2 個正整數 i 和 j,表示外籍飛行員 i 可以和英國飛行員 j 配合。最後以 2個-1 結束。

輸出格式:

第 1 行是最佳飛行員配對方案一次能派出的最多的飛機數 m。接下來 m 行是最佳飛行員配對方案。每行有 2個正整數 i 和 j,表示在最佳飛行員配對方案中,飛行員 i 和飛行員 j 配對。如果所求的最佳飛行員配對方案不存在,則輸出『no solution!』。

輸入樣例#1:

5 10

1 71 8

2 62 9

2 10

3 73 8

4 74 8

5 10

-1 -1

輸出樣例#1://本題spj好評,只要總匹配數對了,輸出的匹配不一定按照樣例輸出,顛倒順序或替換一些匹配也是能得分的

4

1 72 9

3 85 10

裸的二分圖最大匹配,這題的資料範圍可以直接套上匈牙利演算法的板子。之前做的題因為資料範圍太大沒敢用鄰接矩陣存圖,這次總算有機會了……

還可以用最大流解,詳見二分圖最大匹配。

個人感覺匈牙利在oi中應用不太廣,目前我只知道匈牙利專門對付二分圖最大匹配,好像沒別的作用了……網路流用途就廣泛得多,沒做過的童鞋可以做一下傳說中的網路流24題,裡面有許多神奇的建圖技巧,一道難題經過一些神奇的轉換之後就成了一道網路流的題目,就能直接套上板子了。這題就是其中的t1。

#include#include

int n,m,ans=0

;int g[105][105]=;

int pair[105

];bool vis[105]=;

bool dfs(int

u) }

}return0;

}int

main()

for(int i=1;i<=m;i++)

printf(

"%d\n

",ans);

for(int i=m+1;i<=n;i++)

if(pair[i]) printf("

%d %d\n

",pair[i],i);

return0;

}

洛谷 P2756 飛行員配對方案問題

題目背景 第二次世界大戰時期.題目描述 英國皇家空軍從淪陷國徵募了大量外籍飛行員。由皇家空軍派出的每一架飛機都需要配備在航行技能和語言上能互相配合的2 名飛行員,其中1 名是英國飛行員,另1名是外籍飛行員。在眾多的飛行員中,每一名外籍飛行員都可以與其他若干名英國飛行員很好地配合。如何選擇配對飛行的飛...

洛谷P2756 飛行員配對方案問題

第二次世界大戰時期.英國皇家空軍從淪陷國徵募了大量外籍飛行員。由皇家空軍派出的每一架飛機都需要配備在航行技能和語言上能互相配合的2 名飛行員,其中1 名是英國飛行員,另1名是外籍飛行員。在眾多的飛行員中,每一名外籍飛行員都可以與其他若干名英國飛行員很好地配合。如何選擇配對飛行的飛行員才能使一次派出最...

洛谷 P2756 飛行員配對方案問題

題目背景 第二次世界大戰時期.題目描述 英國皇家空軍從淪陷國徵募了大量外籍飛行員。由皇家空軍派出的每一架飛機都需要配備在航行技能和語言上能互相配合的2 名飛行員,其中1 名是英國飛行員,另1名是外籍飛行員。在眾多的飛行員中,每一名外籍飛行員都可以與其他若干名英國飛行員很好地配合。如何選擇配對飛行的飛...