題目傳送門
如題,給出乙個網路圖,以及其源點和匯點,求出其網路最大流。
第一行包含四個正整數n、m、s、t,分別表示點的個數、有向邊的個數、源點序號、匯點序號。
接下來m行每行包含三個正整數ui、vi、wi,表示第i條有向邊從ui出發,到達vi,邊權為wi(即該邊最大流量為wi)
一行,包含乙個正整數,即為該網路的最大流。
4 5 4 3時空限制:1000ms,128m4 2 30
4 3 20
2 3 20
2 1 30
1 3 40
資料規模:
對於30%的資料:n<=10,m<=25
對於70%的資料:n<=200,m<=1000
對於100%的資料:n<=10000,m<=100000
樣例說明:
題目中存在3條路徑:
4–>2–>3,該路線可通過20的流量
4–>3,可通過20的流量
4–>2–>1–>3,可通過10的流量(邊4–>2之前已經耗費了20的流量)
故流量總計20+20+10=50。輸出50。
#include
using
namespace std;
typedef
long
long ll;
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const
int inf =
0x3f3f3f3f
;const
int maxn =
1e5+7;
int n, m;
struct edge edge[maxn <<1]
;// 雙向邊,開 2 倍陣列
int head[maxn]
;int cnt;
// 邊的數量,從 0 開始編號
int depth[maxn]
;// 分層圖標記深度
int cur[maxn]
;// 當前弧優化,記錄當前點 u 迴圈到了哪一條邊
void
add(
int u,
int v,
int w)
// bfs分層圖
bool
bfs(
int s,
int t)}}
return depth[t]
;// 匯點深度為 0:不存在分層圖,返回false;
// 非 0 :存在增廣路,返回true
}// dfs尋找增廣路
intdfs
(int u,
int flow,
int t)
}return flow - rest;
// flow:推送量,rest:淤積量,flow - rest:接受量/成功傳遞量
}int
dinic
(int s,
int t)
return ans;
}int
main()
cout <<
dinic
(s_, t_)
<< endl;
}}
洛谷P3376 模板 網路最大流
如題,給出乙個網路圖,以及其源點和匯點,求出其網路最大流。輸入格式 第一行包含四個正整數n m s t,分別表示點的個數 有向邊的個數 源點序號 匯點序號。接下來m行每行包含三個正整數ui vi wi,表示第i條有向邊從ui出發,到達vi,邊權為wi 即該邊最大流量為wi 輸出格式 一行,包含乙個正...
洛谷 P3376 模板 網路最大流
題目描述 如題,給出乙個網路圖,以及其源點和匯點,求出其網路最大流。輸入格式 第一行包含四個正整數n m s t,分別表示點的個數 有向邊的個數 源點序號 匯點序號。接下來m行每行包含三個正整數ui vi wi,表示第i條有向邊從ui出發,到達vi,邊權為wi 即該邊最大流量為wi 輸出格式 一行,...
洛谷 P3376 模板 網路最大流
洛谷傳送門 如題,給出乙個網路圖,以及其源點和匯點,求出其網路最大流。第一行包含四個正整數 n,m,s,tn,m,s,t,分別表示點的個數 有向邊的個數 源點序號 匯點序號。接下來m行每行包含三個正整數 u i,v i,w iu i,v i,w i,表示第 ii 條有向邊從 u iu i 出發,到達...