最大流 EK演算法

2021-07-28 11:33:59 字數 873 閱讀 4185

ek演算法。。。特別暴力:時間複雜度o(v*e^2)

所以競賽中我們一般用效率更高的dinic演算法

ek演算法核心就是殘量網路圖,殘量指的就是每條路上剩餘的流量。

不難發現,只要能在殘量網路圖上找到一條從源點到匯點的路,就能在這一條路上加流量,所加的流量就是在這條路徑上每條邊殘量取個min,一點一點的加就是了(所以說很暴力)。

注意:

當有流量從u流向了v時,就說明v有流量可以流回u,所以除了u->v的殘量要減,v->u的殘量還要加。

顯然最開始殘量網路可以就是原圖,然後bfs隨便找出一條從源點通向匯點的路,並記錄這條路上流量的最大合法值減去。

裸題:codevs1993

(**寫得醜別介意)

#include

#include

#include

#include

#include

#include

#define oo 1000000000

using namespace std;

int n,m,map[210][210],l;

bool asd[210];

int fa[210],q[210],maxin[210],h,t; //about bfs

bool bfs()

h++;

}return0;}

int ek()

sum+=min1;

}return sum;

}int main()

printf("%d",ek());

return

0;}

最大流 EK演算法

ek演算法是求最大流的一種容易實現 易懂的演算法。ek演算法仍然是乙個基於增廣路的演算法,思路非常簡單。每次從s嘗試找到一條到達t的路徑,路徑上最小的殘留量大於0,那麼我們就可以把這條路上的最小殘留量減去,累加到ans裡。繼續bfs直到找不到位置,此時ans就是最大流。ek增廣路演算法的時間複雜度為...

最大流EK演算法模板

include ek 演算法。時間複雜度 ve 2 include includeusing namespace std const int maxn 100 const int inf 1 30 1 int g maxn maxn int flow maxn pre maxn bool vis m...

最大流問題 EK演算法

最大流的目的是將最多的物品從源點s通過其他點的中轉,運送到匯點t,每條邊具有能運送物品的上限。從s運送出來的物品數目等於到達t的物品數量。針對圖a,其中每條邊代表運送物品的上上限,圖b是其乙個可行流 a b,a是實際運送物品,b是物品上限 其結果為9,但不是最大流11,這樣的可行流有多個,而最大流就...