網路流24題 搭配飛行員

2021-10-09 18:43:15 字數 2316 閱讀 9980

飛行大隊有若干個來自各地的駕駛員,專門駕駛一種型號的飛機,這種飛機每架有兩個駕駛員,需乙個正駕駛員和乙個副駕駛員。由於種種原因,例如相互配合的問題,有些駕駛員不能在同一架飛機上飛行,問如何搭配駕駛員才能使出航的飛機最多。

因為駕駛工作分工嚴格,兩個正駕駛員或兩個副駕駛員都不能同機飛行。

input

第一行,兩個整數 n

nn 與 m

mm,表示共有 n

nn 個飛行員,其中有 m

mm 名飛行員是正駕駛員。

下面有若干行,每行有 2

22 個數字 a、b

a、ba、

b。表示正駕駛員 a

aa 和副駕駛員 b

bb 可以同機飛行。

注:正駕駛員的編號在前,即正駕駛員的編號小於副駕駛員的編號。

output

僅一行乙個整數,表示最大起飛的飛機數。

example

樣例輸入

1051

7262

10374

859

樣例輸出

4
hint

2≤n

≤100

2≤n≤100

2≤n≤10

0二分圖匹配的模板題

#include

using

namespace std;

const

int maxn=

30000

;struct nodee[maxn]

;int match[maxn]

,dismatch[maxn]

,vis[maxn]

,t,head[maxn]

,ans,m,n,u,v;

void

add(

int u,

int v)

bool

dfs(

int u)}}

return0;

}int

main()

for(

int i =

1; i <= n; i++)}

printf

("%d\n"

, ans)

;}

二分圖最大匹配轉化成網路流

把源點 s

ss 與左邊的點連一條容量為 1

11 的邊

把右邊的點與匯點 t

tt 連一條容量為 1

11 的邊

把左右能匹配的連一條容量為 1

11 的邊

最後求最大流

#include

using

namespace std;

const

int maxn=

1e6+7;

const

int maxm=

2e6+7;

const

int inf=

0x3f3f3f3f

;struct dinic e[maxm]

;int head[maxn]

, dep[maxn]

, tol, ans;

int cur[maxn]

;int src, sink, n;

void

add(

int u,

int v,

int f)

bool

bfs()}

}return

false;}

intdfs

(int x,

int maxx)}}

return0;

}int

dinic

(int s,

int t)

return ans;

}void

init

(int n)

} g;

int n,m;

intmain()

for(

int i = m +

1; i <= n; i++

)while(~

scanf

("%d%d"

,&u,

&v))

printf

("%d\n"

, g.

dinic

(s, t));

return0;

}

網路流24題 搭配飛行員

題目 洛谷p2756 tips 兩處的輸出格式不同,提交時注意輸出格式233 解法題目其實是一道二分圖匹配 匈牙利水過 考慮網路流建模。建立兩點超源 s s 超匯t role presentation style position relative t t,對於搭配,若 u u 與v role pr...

網路流24題 搭配飛行員

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

搭配飛行員 網路流24題 1 24

搭配飛行員 題面 飛行大隊有若干個來自各地的駕駛員,專門駕駛一種型號的飛機,這種飛機每架有兩個駕駛員,需乙個正駕駛員和乙個副駕駛員。由於種種原因,例如相互配合的問題,有些駕駛員不能在同一架飛機上飛行,問如何搭配駕駛員才能使出航的飛機最多。因為駕駛工作分工嚴格,兩個正駕駛員或兩個副駕駛員都不能同機飛行...