Dinic ISAP求最大流

2021-10-11 15:30:33 字數 1279 閱讀 8903

給定乙個包含 n 個點 m

條邊的有向圖,並給定每條邊的容量,邊的容量非負。

圖中可能存在重邊和自環。求從點 s

到點 t的最大流。

輸入格式

第一行包含四個整數 n,m,s,t。

接下來 m

行,每行三個整數 u,v,c,表示從點 u 到點 v 存在一條有向邊,容量為 c。

點的編號從 1

到 n。

輸出格式

輸出點 s到點 t的最大流。

如果從點 s無法到達點 t 則輸出 0。

資料範圍

2≤n≤10000,

1≤m≤100000,

0≤c≤10000,

s≠t輸入樣例:

7 14 1 7

1 2 5

1 3 6

1 4 5

2 3 2

2 5 3

3 2 2

3 4 3

3 5 3

3 6 7

4 6 5

5 6 1

6 5 1

5 7 8

6 7 7

輸出樣例:

#include

#include

#include

using

namespace std;

const

int n =

10010

, m =

200010

, inf =

1e8;

int n, m, s, t;

int h[n]

, e[m]

, f[m]

, ne[m]

, idx;

int q[n]

, d[n]

, cur[n]

;void

add(

int a,

int b,

int c)

bool

bfs()}

}return

false;}

intfind

(int u,

int limit)

}return flow;

}int

dinic()

intmain()

printf

("%d\n"

,dinic()

);return0;

}

模板 EK求最大流 dinic求最大流

acm模板 yxc老師的部分總結 基本概念 1.1 流網路,不考慮反向邊 1.2 可行流,不考慮反向邊 1.2.1 兩個條件 容量限制 流量守恆 1.2.2 可行流的流量指從源點流出的流量 流入源點的流量 1.2.3 最大流是指最大可行流 1.3 殘留網路,考慮反向邊,殘留網路的可行流f 原圖的可行...

Dinic演算法求最大流

include using namespace std const int oo 1e9 無窮大 const int maxm 111111 邊的最大數量,為原圖的兩倍 const int maxn 999 點的最大數量 int node,src,dest,edge node節點數,src源點,de...

Dinic求最大流 最小割

o v 2 e 建圖時建一條流量為0的反向邊,正向邊每減去流量f,反向邊增加流量f.對於無向圖當做兩條邊。cap 每條邊最大流量 建圖後 呼叫dinic 用bfs 為每個節點進行層次編號,在每種層次編號下,用dinic 即dfs找到所有增廣路,加到最大流結果。theme 給定m條邊,n個點,1為源點...