網路流主要解決三種問題:最大流、最小流和費用流。
最大流演算法主要有三種:ek演算法、dinic演算法、sap演算法。
本篇部落格是關於dinic演算法的。最壞的情況下,dinic演算法將達到複雜度o(v
e2)'>o(v2e)。
1 #include 2 #include 3 #include 4 #include 5 #include 67using
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演算法通過深度優先搜尋尋找增廣路,並沿著它增廣...