网络流(2)-最小费用流

定义

每条边都有单位费用 w ( i , j ) w(i,j) w(i,j),设f为N上的一个可行流,称 w ( f ) = ∑ &lt; i , j &gt; ∈ E w ( i , j ) f ( i , j ) w(f) = \sum_{&lt;i,j&gt; ∈ E} w(i,j)f(i,j) w(f)=<i,j>Ew(i,j)f(i,j) 为f的费用,所有流量为 v 0 v_0 v0的可行流中费用最小的称作流量 v 0 v_0 v0的最小可行流

辅助网络

负回路算法求最小费用流

  1. 首先求一个流量为 v 0 v_0 v0的可行流 f f f
  2. 如果残余网络 N ( f ) N(f) N(f)中存在权aw的负回路C,令$f^{’} ← f + h^{C} $
  3. 重复进行,直到残余网络中不存在权aw的负回路为止,则f是最小费用流

最短路径与负回路

定理 带权有向图D中任意两点间都有最短路径或不存在路径当且仅当D中不含负回路。

可以用Floyd算法求负回路(如果存在),带上标记函数即可恢复出最短路径(从而找出负权环位置)

负回路算法伪码

最短路径算法

  1. 从一个初始的最小费用流 f f f(如零流)开始
  2. 如果 v ( f ) &lt; v 0 v(f) &lt; v_0 v(f)<v0,找一条费用最少的s-t增广链 P P P,修改 P P P上的流量,得到新的可行流 f ′ f^{&#x27;} f
  3. 重复进行,直到流量等于 v 0 v_0 v0为止

如果存在负回路,用Floyd算法计算最短路径;若不存在负回路,可以用Bellman-Ford算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值