1.上下界网络
很好理解,在以往的网络中,我们的每条边只有个最大值,即可流过的最大流量,现在我们还有一个 流过流量的最小值 的限制,即 下界 。
2.无源汇上下界可行流
因为有了下界,所以我们其实连找到一条可行流都很困难,所以总是先考虑可行流的求解。
当我们拿到一个上下界网络时,会很想用差值网络来代替原网络,因为我们无法处理下界这个限制。然而很显然这是错的,因为在差值网络中,我们甚至无法保证流量平衡。
好,现在的问题就转化为了怎么保证差值网络流量平衡,可以发现,在一个正常的网络流中,唯一流量不平衡的是 源点与汇点 ,所以我们有了一个方向:尝试把所有不平衡的流量全放到源点与汇点里去。当然,这两个源点与汇点是虚点,实际原网络中并不存在。
再深入,我们就有了一个系统的建模方法:在差值网络的基础上,如果流进点 u u u 的流量大于流出的,就从虚拟源点连一条流量为差值的边,反之就连向汇点。注意这里说的“流进流出”都是指下界。
建完模,考虑寻找可行流,由建模的原理,只要源点与汇点所有有关的边全部满流(易证源点满流时汇点也满流),就可以保证原网络流量平衡,即寻得一条可行流,那么只要跑一遍最大流即可。
3.有源汇上下界可行流
我们刚刚是新建了两个虚点作源点与汇点,那么如果已有源汇点呢?其实由于流量平衡,所以流出源点( S S S )的流量与流入汇点( T T T )的流量是相等的,我们连一条 ( T , S , [ 0 , i n f ) ) (T,S,[0,inf)) (T,S,[0,inf)) 的边就可以将其抵消,此时再跑一遍无源汇上下界可行流即可。
4.有源汇上下界最大流
我们先求一遍有源汇上下界可行流,此时若有可行流,记为 f 1 f_1 f1 ,那么新源点与新汇点的所有边已经满了,同时也已经让新网络的残量网络流量平衡(感性理解,可以视作都减去一个不同的差值使其平衡),所以我们以原网络的源点与汇点跑一遍最大流 f 2 f_2 f2 就可以“榨干”这个残量网络(记得删去从 T T T 到 S S S 的那条边!另外倒没太大关系)。
a n s = f 1 + f 2 ans=f_1+f_2 ans=f1+f2
5.有源汇上下界最小流
呃,这我不知道什么原理,但是记从汇点到源点的最大流为 f 2 f_2 f2 ,则 a n s = f 1 − f 2 ans=f_1-f_2 ans=f1−f2
P.S. 还有一个东西叫无(有)源汇上下界最小费用可行流,但这东西我不知道咋做,有缘更新