算法模板
Ek算法 时间复杂度: O ( n m 2 ) O(nm^2) O(nm2)
给一个流网络,维护残留网络。
while(){
①在当前的残留网络里找增广路(bfs):f'
②更新残留网络:把当前的残留网络 Gf 更新为新流的残留网络 G(f+f')
}
①简单的遍历,用 b f s bfs bfs即可。
②假设当前残留网络里正向边的容量为 c 1 c_1 c1,反向边的容量为 c 2 c_2 c2,且增广路径流了 k k k的流量,正向边的容量变为 c 1 − k c_1-k c1−k,反向边的容量变为 c 2 + k c_2+k c2+k。
更新:一旦找到一条从 s s s到 t t t的增广路径之后,首先考虑整个增广路径最多可以增加多少流,即最小边的流量。若最小边的流量为 k k k,那么整条增广路径的流量就为 k k k,再用前面所描述的方式将这条路径上所有的边的容量更新即可。
用 p r e [ ] pre[] pre[]记录前驱边,即可记录整条路径。
- E k Ek Ek算法在求最大流时一般用不到,但 E K EK