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,這樣的可行流有多個,而最大流就...