洛谷 P3376 模板 網路最大流

2021-10-02 01:25:19 字數 1768 閱讀 5753

題目傳送門

如題,給出乙個網路圖,以及其源點和匯點,求出其網路最大流。

第一行包含四個正整數n、m、s、t,分別表示點的個數、有向邊的個數、源點序號、匯點序號。

接下來m行每行包含三個正整數ui、vi、wi,表示第i條有向邊從ui出發,到達vi,邊權為wi(即該邊最大流量為wi)

一行,包含乙個正整數,即為該網路的最大流。

4 5 4 3

4 2 30

4 3 20

2 3 20

2 1 30

1 3 40

時空限制:1000ms,128m

資料規模:

對於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 出發,到達...