上下界网络流学习笔记

无源汇上下界可行流

一些点,一堆边,每条边要满足流量限制\([l,r]\)

先令每条边流量等于流量下限,得到初始流,初始流可能不满足流量守恒,再建出残量网络(上限-下限),求出可能不满足流量守恒的附加流,使附加流和初始流合并后满足流量守恒

如何建残量网络

定义\(a[i]\)表示初始流中流入量-流出量

\(a[i]>0\)表示流入量大于流出量,附加量需要流入量小于流出量

\(a[i]<0\)表示流入量小于流出量,附加量需要流入量大于流出量

\(a[i]=0\)表示流入量=流出量,附加中流入量等于流出量

问题变为多余的流入量和流出量从哪来

新建虚拟结点\(ss\)\(tt\)

对于\(a[i]>0\),附加量流出量大于流入量,\(i\)\(tt\)连一条\(a[i]\)的边

\(a[i]<0\),附加量流入量大于流出量,\(ss\)\(i\)连一条\(-a[i]\)的边

若在残量网络上一个满流,这个流就是我们需要的附加流

最后,每条边的可行流\(=\)流量下界\(+\)附加流中这条边的流量

有源汇上下界可行流

有原点\(s\)和汇点\(t\),还有一些边,每条边有一个限制\([l,r]\)

即使有了源和汇,也可以转换为无源汇,因为\(s\)的流出量\(=t\)的流入量,就从\(t\)\(s\)连一条下界为\(0\)上界为\(+\infty\)的边,跑无源汇上下界可行流,最终的可行流就是\(t\)\(s\)的边上的流量

有源汇上下界最大流

有原点\(s\)和汇点\(t\),还有一些边,每条边有一个限制\([l,r]\),求出最大流

先求出可行流,再从原图残量网络中求出最大流,最大流就是可行流\(+\)最大流

有源汇上下界最小流

有原点\(s\)和汇点\(t\),还有一些边,每条边有一个限制\([l,r]\),求出最小流

先求出可行流

因为dinic中,反向边流量增加\(=\)正向边流量减小,所以,从\(t\)\(s\)求一边最大流,可行流大小-\(t\)\(s\)的最大流就是最小流

有源汇上下界最小费用流

建边:
对于边\(u\to v\),费用为\(w\),流量为\([l,r]\)
建成三条:
\(s\to v\),费用为\(w\),流量为\(l\)
\(u\to t\),费用为\(0\),流量为\(l\)
\(u\to v\),费用为\(w\),流量为\(r-l\)
跑最小费用最大流

posted @ 2018-02-25 21:22  Fheiwn  阅读(162)  评论(0编辑  收藏  举报