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