問題模型:二分圖最大匹配這題我們用網路流來做。轉化模型:網路最大流
因為有多個飛行員,且是有向無環圖,所以我們建立超級源點和超級匯點,這樣才能用網路流去做。
將超級源點與外籍飛行員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名是外籍飛行員。在眾多的飛行員中,每一名外籍飛行員都可以與其他若干名英國飛行員很好地配合。如何選擇配對飛行的飛行員才能使一次派出最多的飛機。對於給定的...