上下界网络流笔记

在学习上下界网络流之前,首先应该把自己对网络流的认识上升到抽象层面。

让我们回到基础概念:

在有向图 \(G=(V,E)\) 中,用 \(c(u,v)\) 表示边的容量,\(f(u,v)\) 表示边的流量。

可行流即函数 \(f:E\to \mathbb R\) 满足

  • 容量限制:\(0\le f(u,v)\le c_{u,v}\)
  • 流量守恒:\(\forall u,\sum_{(u,v)\in E} f(u,v)=\sum_{(v,u)\in E}f(v,u)\)

当然,如果没有别的限制,\(f(u,v)=0\) 就是一个可行流。

我们稍稍改一改流量守恒,要求:\(\forall u,\sum_{(u,v)\in E}f(u,v)-\sum_{(v,u)\in E} f(v,u)=a_u\),如果给出 \(a_u\),怎么跑出一个可行流呢?

先考虑 \(a_u>0\),这意味着流入它的流量小于流出它的流量。如果强行把流入它的流量加上 \(a_u\),它才能满足正常的流量守恒。这也很好做到,建立超级源点,向它连权值为 \(a_u\) 的边。

\(a_u<0\) 时同样的,找个超级汇点连出去。

这时容易发现,跑最大流就能得到一个解。


接下来考虑把流量限制拿去改,改成 \(0\le l_{u,v}\le f(u,v)\le r_{u,v}\),即流量限制在给出的区间 \([l_{u,v},r_{u,v}]\) 内,怎么做?

\(f'(u,v)=f(u,v)-l_{u,v}\),则 \(0\le f'(u,v)\le r_{u,v}-l_{u,v}\)。假如把 \(f'\) 作为流量,易得 \(f'\) 是满足上述的修改过的流量守恒的,因此转为了上一个问题。

理解了这些以后,上下界网络流的各种 模板 都非常简单了。

posted on 2022-01-18 22:34  Dreamunk  阅读(104)  评论(0)    收藏  举报

导航