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

2021-10-02 21:48:59 字數 1681 閱讀 3838

問題模型:二分圖最大匹配

轉化模型:網路最大流

這題我們用網路流來做。

因為有多個飛行員,且是有向無環圖,所以我們建立超級源點和超級匯點,這樣才能用網路流去做。

將超級源點與外籍飛行員1

11~m

mm連流量為1

11的邊,將英國飛行員m+1

m+1m+

1到n+

mn+m

n+m與超級匯點連流量為1

11的邊,然後將題目給出的邊也連流量為1

11的邊即可。

之後再去跑最大流dinic

\text

dinic

演算法,得出最大匹配數,最後輸出時判斷一下就行。

只判斷正邊,所以從第0

00條邊開始判斷,每次加222。

判斷當前邊是否與匯點或源點相連,相連則跳過

判斷邊權是否為0

00,為0

00則跳過

如果滿足了上述條件,輸出即可,最後給出**

#include

#include

#include

#include

using

namespace std;

const

int a =

1e5+11;

const

int b =

1e6+11;

const

int mod =

1e9+7;

const

int inf =

0x3f3f3f3f

;inline

intread()

int m, n, cnt, opt, s, t, ans, head[a]

, d[a]

, q[a]

;struct node e[a]

;inline

void

add(

int from,

int to,

int val)

inline

bool

makelevel

(int s,

int t)}}

return

false;}

intdfs

(int x,

int flow,

int t)

}return sum;

}int

main()

for(

int i =

1; i <= m; i++

)add

(s, i,1)

,add

(i, s,0)

;for

(int i = m +

1; i <= m + n; i++

)add

(i, t,1)

,add

(t, i,0)

;while

(makelevel

(s, t)

) ans +

=dfs

(s, inf, t)

; cout << ans <<

'\n'

;for

(int i =

0; i <= cnt; i +=2

)}return0;

}

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

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

P2756 飛行員配對方案問題

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

P2756 飛行員配對方案問題

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