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