【学习笔记】上下界网络流

一、前言

上课时,有些同学对算法的解释是错误的,好像不是非常清楚做法的原理(?),在此写一篇 blog 记录原理赠与自己与他人。

二、算法

1.无源汇上下界可行流

n n n 个点, m m m 条边,每条边 e e e 有一个流量下界 l o w e r ( e ) lower(e) lower(e) 和流量上界 u p p e r ( e ) upper(e) upper(e),求一种可行方案使得在所有点满足流量平衡条件的前提下,所有边满足流量限制。

做法:

我们的网络流算法只能处理:源汇两点不要求流量守恒,边只有上届。

容易相当让每一条边都先流走一个 l o w e r ( e ) lower(e) lower(e),然后考虑每个点的流量平衡。

记每一条边流走一个 l o w e r ( e ) lower(e) lower(e) 后的图为 G ′ \mathbb{G'} G

Δ ( u ) = ∑ ( f r o , u ) ∈ E f ( f r o , u ) − ∑ ( u , t o ) ∈ E f ( u , t o ) \Delta (u) = \sum_{(fro, u) \in E} f (fro, u) - \sum_{(u, to) \in E} f (u, to) Δ(u)=(fro,u)Ef(fro,u)(u,to)Ef(u,to)

(含义: u u u 点需要向外流的流量,为负表示需要接受 − Δ ( u ) -\Delta (u) Δ(u) 的流量)

V 1 = { u ∣ d e l t a ( u ) > 0 } , V 2 = { u ∣ d e l t a ( u ) < 0 } \mathbb{V_1} = \{ u | delta (u) > 0 \}, \mathbb{V_2} = \{ u | delta (u) < 0 \} V1={udelta(u)>0},V2={udelta(u)<0}

相当于我们现在要通过一些满足上界的路径,将 Δ \Delta Δ 为正的点的流量流给 Δ \Delta Δ 为负的点。

分别建立一个虚拟源汇点 s , t s, t s,t

s s s 向所有 Δ ( u ) > 0 \Delta (u) > 0 Δ(u)>0 的点连一条 ( s , u , Δ ( u ) ) (s, u, \Delta (u)) (s,u,Δ(u))

所有 Δ ( u ) < 0 \Delta (u) < 0 Δ(u)<0 的点向 t t t 连一条 ( u , t , Δ ( u ) ) (u, t, \Delta (u)) (u,t,Δ(u))

相当于我们从 s s s 强推给 V 1 \mathbb{V1} V1(需要向外流的点) Δ ( u ) \Delta (u) Δ(u) 的流量,让他们在 G ′ \mathbb{G'} G 中乱流,最后全部流到 V 2 \mathbb{V_2} V2(需要从外面接受流量的点),使所有 V 2 V_2 V2 的点都得到 − Δ ( u ) -\Delta (u) Δ(u) 的流量,然后再 通过 V 2 V_2 V2 留给 t t t

这样的话,如果最后 t t t 得到的流量等于 ∑ u ∈ V 2 − Δ ( u ) \sum_{u \in \mathbb{V_2}} -\Delta(u) uV2Δ(u),说明所有的 V 2 \mathbb{V_2} V2 的点都从 V 1 \mathbb{V_1} V1 得到了 − Δ ( u ) -\Delta (u) Δ(u) 的流量,只有这样才能满足流量平衡。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值