網路流 最大流之Dinic演算法

2022-04-30 11:51:15 字數 1101 閱讀 5529

網路流主要解決三種問題:最大流、最小流和費用流。

最大流演算法主要有三種:ek演算法、dinic演算法、sap演算法。

本篇部落格是關於dinic演算法的。最壞的情況下,dinic演算法將達到複雜度o(v

e2)'>o(v2e)。

1 #include 2 #include 3 #include 4 #include 5 #include 6

7using

namespace

std;

8const

int inf = 0x3f3f3f3f;9

const

int maxn = 200 + 10;10

const

int maxm = 200 + 10;11

12int

n,m;

13int l[maxn];//

記錄層數

14int h[maxn];//

鏈式前向星

15int

cur[maxn];

16int tot = 0;17

18struct

edge

1924 }es[maxm*2];//

記錄邊 注意是2倍

2526

void add_edge(int u, int v, int

c)27

3132

bool bfs(int s, int

t)3347}

48}49return

false;50

}5152int dfs(int x, int t, int

mf)5366}

67return

ret;68}

6970

int dinic(int s, int

t)71

78return

ans;79}

8081

intmain()

8294

int ans = dinic(1

,n);

95 printf("

%d\n

",ans);96}

97return

0;

98 }

網路流最大流 Dinic演算法

o n 2 m 的演算法 比ek的o n m 2 優很多 ek通常解決10 3 10 4規模的網路 而dinic能解決10 4 10 5的網路 dinic演算法的思想也是分階段地在層次網路中增廣。它與最短增廣路演算法不同之處是 最短增廣路每個階段執行完一次bfs增廣後,要重新啟動bfs從源點vs開始...

網路流 最大流Dinic演算法

突然發現到了新的一年什麼東西好像就都不會了涼涼 建殘量網路圖 在殘量網路圖上跑增廣路 重複1直到沒有增廣路 注意乙個殘量網路圖要盡量把價值都用完,不然會浪費建圖的時間 include include include include include include include include in...

最大流之Dinic演算法

之前簡單介紹了最大流之ford fulkerson演算法,此演算法時間複雜度為o f e 大多數情況下,這個演算法已經足夠高效了,但當頂點數或最大流流量非常大時,這個演算法就顯得不夠快了。下面簡單介紹易實現的dinic演算法。ford fulkerson演算法通過深度優先搜尋尋找增廣路,並沿著它增廣...