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

一、前言

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

二、算法

1.无源汇上下界可行流

nnn 个点,mmm 条边,每条边 eee 有一个流量下界 lower(e)lower(e)lower(e) 和流量上界 upper(e)upper(e)upper(e),求一种可行方案使得在所有点满足流量平衡条件的前提下,所有边满足流量限制。

做法:

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

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

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

Δ(u)=∑(fro,u)∈Ef(fro,u)−∑(u,to)∈Ef(u,to)\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)

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

V1={u∣delta(u)>0},V2={u∣delta(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,ts, ts,t

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

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

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

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


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值