網路流最大流 Dinic演算法

2021-08-18 15:55:11 字數 973 閱讀 8853

o(n^2*m)的演算法

比ek的o(n*m^2)優很多

ek通常解決10^3 –10^4規模的網路

而dinic能解決10^4–10^5的網路

dinic演算法的思想也是分階段地在層次網路中增廣。它與最短增廣路演算法不同之處是:最短增廣路每個階段執行完一次bfs增廣後,要重新啟動bfs從源點vs開始尋找另一條增廣路;而在dinic演算法中,只需一次dfs過程就可以實現多次增廣,這是dinic演算法的巧妙之處。dinic演算法具體步驟如下:

(1)初始化容量網路和網路流。

(2)構造殘留網路和層次網路,若匯點不再層次網路中,則演算法結束。

(3)在層次網路中用一次dfs過程進行增廣,dfs執行完畢,該階段的增廣也執行完畢。

(4)轉步驟(2)。

貼模板:

#include

#include

#include

#include

#include

#include

#define n 10005

#define m 200005

#define inf 0x3f3f3f3f

using

namespace

std;

int n,m,s,t,cnt=1,head[n],incf[n],d[n],maxflow;

struct nodeedge[m];

void add(int x,int y,int z)

bool bfs()}}

return

false;

}int dinic(int x,int flow)

}return flow-res;

}int main()

int flow=0;

while(bfs())

printf("%d",maxflow);

return

0;}

網路流 最大流Dinic演算法

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

網路流 最大流之Dinic演算法

網路流主要解決三種問題 最大流 最小流和費用流。最大流演算法主要有三種 ek演算法 dinic演算法 sap演算法。本篇部落格是關於dinic演算法的。最壞的情況下,dinic演算法將達到複雜度o v e2 o v2e 1 include 2 include 3 include 4 include ...

網路流 最大流 Dinic演算法的初步認識

網路流 最大流 dinic演算法的初步認識 目前部落格轉移 簡單說一說 有乙個起點 源點 和乙個終點 匯點 它們之間用很多直徑大小不一的管子連在一起,為什麼要用大小不一的管子,假如這些都是水管 那麼你要做的就是 算出從源點到匯點最大可以流入多少水。顯然,對於一條路上,它的最大流是這條路上直徑最小的管...