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

2022-05-05 14:18:07 字數 2806 閱讀 9960

p2756 飛行員配對方案問題

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

題目描述

一共有 n 個飛行員,其中有 m 個外籍飛行員和 (n - m) 個英國飛行員,外籍飛行員從 1 到 m

編號,英國飛行員從 m + 1 到 n 編號。

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

輸入格式

輸入的第一行是用空格隔開的兩個正整數,分別代表外籍飛行員的個數 m 和飛行員總數 n。 從第二行起到倒數第二行,每行有兩個整數 u,v,代表外籍飛行員 u 可以和英國飛行員 v 配合。 輸入的最後一行保證為 -1,代表輸入結束。

輸出格式

本題存在 special judge。 請輸出能派出最多的飛機數量,並給出一種可行的方案。

輸出的第一行是乙個整數,代表一次能派出的最多飛機數量,設這個整數是k。 第 2 行到第 k+1 行,每行輸出兩個整數

u,v,代表在你給出的方案中,外籍飛行員 u 和英國飛行員 v 配合。這 k 行的 u 與 v 應該互不相同。

輸入輸出樣例輸入 #1複製

5101

7182

6292

10373

8474

8510-1-1

輸出 #1複製

417

2938

510

說明/提示

【資料範圍與約定】

對於 100% 的資料,保證1≤m≤n<100,1≤u≤m請注意輸入的第一行先讀入 m,再讀入 n。

歡迎開始我們的網路流24題

根據題意我們可以知道這是乙個二分圖,其實是乙個二分圖最大匹配的問題,對於二分圖我們用網路流的方式來解決

二分圖有a和b兩個大集合,a和b之間有線,a和b自身內部無線,相當於a和b分別都在自己的層數。我們在創立乙個源點s,再創乙個終點t,s指向a中所有點,b中所有點指向t,邊的流量我們設為1,這樣不就構成乙個網路流問題

以上說的是對於二分圖最大匹配通用解法,具體針對本題

我們先構建從s到a的邊,再構建從b到t的邊,然後讀入資料,

我們在讀入時,外籍飛行員是u,英國飛行員的編號為v+n

最後我們輸出時還要輸出所匹配的結果,因此我們用到乙個陣列ansk[i]:標號為i的外籍飛行員與標號為ansk[i]-n的英雄飛行員對應

pre用來存在一條增廣路中,節點的前乙個節點和與之相連的邊

其他的都是正常ek演算法

#include

#include

#include

#include

#include

using

namespace std;

int n,m;

const

int mx=

1<<30;

struct nodenode[

5010];

int top=1;

int s=

1008

,t=1009

;int ansk[

1050];

//標號為i的外籍飛行員和標號為ansk[i]-n的英國飛行員對應

struct ppre[

1010];

//在一條增廣路中,節點的前乙個節點和與之相連的邊

int head[

1010];

int vis[

1010];

//點是否查詢過

inline

intread()

while

(c>=

'0'&&c<=

'9')x=x*

10+c-

'0',c=

getchar()

;return x*f;

}inline

void

addedge

(int u,

int v,

int val)

bool

addroad()

}}return0;

}//尋找增廣路

intek()

for(

int i=t;i!=s;i=pre[i]

.fa)

ans+

=mi;

}return ans;

}//ek求最大流

intmain()

for(i=

1;i<=m;i++

)int u,v;

while(1

)printf

("%d\n",ek

());

for(i=

1;i<=n;i++

)return0;

}

P2756 飛行員配對方案問題

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

P2756 飛行員配對方案問題

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

p2756 飛行員配對方案問題

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