月明船笛参差起,风定池莲自在香。——纳凉 【宋】 秦观|

CSP_AK_zyz

园龄:1年8个月粉丝:2关注:1

【学习笔记】【模板】【自学】网络最大流

定义:

f(x,y) 表示连接 xy 的流量,c(x,y) 表示连接 xy 的最大流量限制。

显然有 f(x,y)c(x,y),也有 f(x,y)=f(y,x),因为逆流流量相反。

剩余流量:c(ui,ui+1)f(ui,ui+1)

增广路:设该路径为 u1,u2,....,uk 为一条增广路,u1=s,uk=ti[1,k),则有 f(ui,ui+1)<c(ui,ui+1),即
c(ui,ui+1)f(ui,ui+1)>0


Q:思考,为什么不是 f(ui,ui+1)c(ui,ui+1),这样明明也满足流量限制,后面解释。

Edmonds - Karp 增广路算法(简称 EK 算法)

最优路径一定沿着 st 的增广路之一的,在寻找增广路时,BFS 时只考虑剩余流量大于 0 的,这也是增广路的定义,在寻找时,找到一个增广路,考虑增广路每一条边剩余流量的最小值,就能集体加上这个最小值,即将所有的剩余流量都减去这个最小值,这个最小值是
min(c(u1,u2)f(u1,u2),...,c(ut1,ut)f(ut1,ut))

加入这个最小值,这也是这条增广路所有边所能加上的最大的流量。

A:在这里,也就说明了 c(ui,ui+1)f(ui,ui+1)0,因为如果将这条边加入增广路之后,整个能增加的剩余流量最小值只能为 0,因为这并没有意义,所以增广路的定义是 c(ui,ui+1)f(ui,ui+1)>0

反向边 (EK 算法重点)

反悔的机会,每次 update 时将反向边的剩余流量加上这个最小值,就是将原来的那条边重置,再次 BFS 求增广路时可以二次遍历这条边(尽管这是反向边,但是边权依然和正向边相等)。

Tips: 链式前向星存正反向边记得成对存储,用 xor 1 十分方便。

时间复杂度:O(nm2)

本文作者:CSP-AK-zyz

本文链接:https://www.cnblogs.com/CSP-AK-zyz/p/17691603.html

版权声明:本作品采用 BY-NC-SA 4.0 许可协议进行许可。

posted @   CSP_AK_zyz  阅读(49)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起