網路流24題 飛行員配對方案問題

2022-03-15 18:58:12 字數 2644 閱讀 1977

目錄題目內容

樣例提示

題解題集

題目名稱:飛行員配對方案問題

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

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

有\(n\)個英國空軍和\(m\)個外籍空軍,一架飛機需要一對互相配合的英國空軍和外籍空軍配合。給出配合情況,求出最多能發動多少飛機。

第\(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!』。

5 10

1 71 8

2 62 9

2 10

3 73 8

4 74 8

5 10

-1 -1

4

1 72 9

3 85 10

注意題目**!

這是一道最大流裸題。

從原點開始,向每個外籍飛行員連邊,容量為\(1\)。(因為每個外籍飛行員只能被指派一次)

如果外籍飛行員\(i\)與英國飛行員\(j\)配合,那麼就從\(i\)向\(j\)連邊,容量為\(1\)。(每個外籍飛行員與每個英國飛行員最多配合一次)

從每個英國飛行員向匯點連邊,容量為\(1\)。(一對飛行員相互配合只能發動一架飛機)

拿樣例說話,如圖所示

graph td

s(s)-->|1|f1

s(s)-->|1|f2

s(s)-->|1|f3

s(s)-->|1|f4

s(s)-->|1|f5

e6-->|1|t(t)

e7-->|1|t(t)

e8-->|1|t(t)

e9-->|1|t(t)

e10-->|1|t(t)

e11-->|1|t(t)

e12-->|1|t(t)

e13-->|1|t(t)

e14-->|1|t(t)

e15-->|1|t(t)

f1-->|1|e7

f1-->|1|e8

f2-->|1|e6

f2-->|1|e9

f2-->|1|e10

f3-->|1|e7

f3-->|1|e8

f4-->|1|e7

f4-->|1|e8

f5-->|1|e10

其中\(f\)表示外籍飛行員,\(e\)表示英國飛行員。

然後跑一遍\(dinic\)就得到答案了。

//c++

#include#include#include#include#define downt(i,n) for(int i=n;i;i=back[i])

#define forto(name,i,d,u) for(name i=d;i<=u;i++)

#define foruntil(name,i,d,u) for(name i=d;istruct network

#undef nnn

#undef mmmm

void init()

void add(int f,int t,name cap)

void insert(int f,int t,name cap)

}bool climb()return level[t];

}name augment(int p,name m)return sum;

}name dinic(name inf)return maximum;

} void new1(short m)output(dinic(100)),putchar('\n');

forto(short,i,1,m)

for(short j=last[i];back[j];j=back[j])

if(!c[j])output(i),putchar(' '),output(to[j]),putchar('\n');

}};network<200,40000,short>pilot;

int main()inline void output(long long o)inline long long input()

希望這些外籍飛行員裡能有中國飛行員。

還是中國飛行員強。

網路流24題 搭配飛行員 飛行員配對方案

網路流24題 搭配飛行員 輸入檔案 flyer.in 輸出檔案 flyer.out 簡單對比 時間限制 1 s 記憶體限制 128 mb 問題描述 飛行大隊有若干個來自各地的駕駛員,專門駕駛一種型號的飛機,這種飛機每架有兩個駕駛員,需乙個正駕駛員和乙個副駕駛員。由於種種原因,例如相互配合的問題,有些...

網路流24題 飛行員配對方案問題

原題目有special judge所以我將題目去掉special judge之後如下 問題描述 第二次世界大戰時期,英國皇家空軍從淪陷國徵募了大量外籍飛行員。由皇家空軍派出 的每一架飛機都需要配備在航行技能和語言上能互相配合的 2 名飛行員,其中 1 名是英國飛 行員,另 1 名是外籍飛行員。在眾多...

網路流24題 飛行員配對方案問題

luogu 2756 給出n個英國飛行員和m個外籍飛行員,給出每個英國飛行員能配合的外籍飛行員編號,求最多可以選出多少對能互相配合的飛行員 最經典的二分圖匹配問題。其實用匈牙利演算法更合適,在時間複雜度上會更加優秀。用網路流來做的話,超級源點向每個英國飛行員連流量為1的邊,每個英國飛行員向能配合的外...