P3376 模板 網路最大流

2022-05-09 19:06:52 字數 2792 閱讀 6311

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

輸入格式:

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

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

輸出格式:

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

輸入樣例#1:

4 5 4 3

4 2 30

4 3 20

2 3 20

2 1 30

1 3 40

輸出樣例#1:

50
時空限制: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。

看了幾本教材發現都沒有用邊表去寫網路流的,於是自己琢磨了很長時間,

用的是dinic演算法

1 #include2 #include3 #include4 #include5 #include6 #include7

#define lli long long int

8using

namespace

std;

9const

int maxn=300001;10

const

int maxn=0x7fffff;11

void read(int &n)

1216

while(c>='

0'&&c<='9'

)17

18 flag==1?n=-x:n=x;19}

20struct

node

21edge[maxn];

24int

head[maxn];

25int num=0;26

intn,m,s,t;

27int

dis[maxn];

28int

vis[maxn];

29int

cur[maxn];

30void add_edge(int x,int y,int

z)31

39bool bfs(int bg,int

ed)4057}

58}59if(dis[ed]==-1)60

return0;

61else

return1;

62}63int dfs(int now,int a)//

a:所有弧的最小殘量

6480}81

return

flow;82}

83void dinic(int s,int

t)84

93int

main()

94108

dinic(s,t);

109return0;

110 }

update in 2017.7.29

補充乙份加了當前弧優化&&把cap和flow兩個變數合成乙個的**

1 #include2 #include3 #include4 #include5 #include6 #include7

using

namespace

std;

8const

int maxn=10000001;9

const

int maxm=30000001;10

const

int maxn=0x7fffff

;11 inline void read(int &n)

1215

while(c>='

0'&&c<='9')

16 flag==1?n=-x:n=x;17}

18struct

node

19edge[maxm];

22int

head[maxn];

23int num=0;24

intn,m,s,t;

25 inline void add_edge(int x,int y,int

z)26

33int ans=0;34

intdeep[maxn];

35int

cur[maxn];

36 inline bool

bfs()

375253}

54return

deep[t];55}

56int dfs(int now,int

a)5772}

73return

totflow;74}

75 inline void

dinic()

7683

84 printf("%d"

,ans);85}

86int

main()

8797

dinic();

98return0;

99 }

P3376 模板 網路最大流

網路流用於解決流量問題 網路流 所有弧上流量的集合f 稱為該容量網路的乙個網路流。1 定義 帶權的有向圖g v,e 滿足以下條件,則稱為網路流圖 flow network 僅有乙個入度為0的頂點s,稱s為源點。僅有乙個出度為0的頂點t,稱t為匯點。每條邊的權值都為非負數,稱為該邊的容量,記作c i,...

P3376 模板 網路最大流

ek演算法 個人感覺沒有dinic好理解 1 edmonds karp演算法2 時間複雜度o n m m 3 include4 include5 include6 include7 include8 using namespace std 910 const int n 10005 11 const...

P3376 模板 網路最大流

luogu p3376 求網路最大流.首先介紹一下網路流的基本概念.乙個帶權有向圖,邊權稱為容量.其中乙個只有出度的點,源點,乙個只有入度的點,匯點.流從源點源源不斷地產生,在匯點消失.邊的容量就是能它流過的最大流,實際流過的流成為邊的流量.源點流出的最大的流一定和匯點消失的最大的流相等,我們把這個...