【网络流】最大流:点带需求的流通、边带下界的流通
2015-11-05 10:22
369 查看
1)点带需求的流通:
新的框架特点:有多个供给点(d(v)<0),都称作源点;有多个需求点(d(v)>0),都称作汇点。同时仍然满足传统最大流中的容量条件(0 <= f(e) <= cap(e))和需求条件(f_in(v) - f_out(v) = d(v))。需要解决的问题:由于有多个源点和汇点,所以不再考虑最大化问题,而是考虑有没有满足容量条件和需求条件的一个可行流通(可行性)。
判断可行性的方法是,把带需求{ d(v) }的可行流通问题转换为在另一个网络中找最大 s-t 流的问题。另一个网络的构造方法如下:
给个例子就是这样的:
在G‘中找最大 s-t 流,那么最大流的值是多少才能证明原图G中存在可行流通???答案是P272,定理7.50:
G中存在一个带{ d(v) }的可行流通,当且仅当G’的最大 s*-t* 流有值D(其中,D是所有需求的和,同时也是所有供给的和)。
2)点带需求 和 边带下界的流通:
新的框架特点:有多个供给点(d(v)<0),都称作源点;有多个需求点(d(v)>0),都称作汇点;同时,每些边e有最小流量 low(e) 的要求(即,必须使用某些边,且仍然满足传统最大流中的容量条件(low(e) <= f(e) <= cap(e))和需求条件(f_in(v) - f_out(v) = d(v))。需要解决的问题:由于有多个源点和汇点,所以不再考虑最大化问题,而是考虑有没有满足容量条件和需求条件的一个可行流通(可行性)。
判断可行性的方法是,把点带需求{ d(v) }和边带下界{ low(e) }的可行流通问题转换为在另一个只有点带需求{ d(v) }的网络中判断可行流通的问题,进而转换为在第三个网络中找最大
s-t 流的问题。另一个网络的构造方法如下:
对于所有有容量下界 low(e) 的边,将容量变得 0 <= f(e) <= cap(e) - low(e),相当于提前提供了 low(e) 这么多流量的保障;那么,e的尾部节点v应该还能提供的流量要相应减少low(e);同时,e的头部节点v应该在原有流量需要的基础上,再加上强加给它的low(e)的需求!可能没描述清楚,看图:
去下界的转换相当于
v
到 w
有 low(e)个流量已经流过去,那要不要加容量为low(e)的反向边?
答案: 不用。反向边相当于给了后悔的机会,加了反向边,之后就可以把已经流过去的low(e)个流量又推回来,这不是我们想要看到的。
相关文章推荐
- 【网络流-最大流-Dinic-建模】POJ3281 Dining:Pascal 解法
- Ford_Fulkerson算法
- 重标记与前移算法
- 网络流之增广路算法
- Poj2638 网络流+最短路+二分答案
- BZOJ3275 Number (最小割)
- [笔记] 网络流-最大流 POJ-1273\HDU-4240
- 上下界网络流初探
- 最大流/二匹配
- Edmonds-Karp 最大流 hdu 1532 Drained Ditches
- 网络流_poj1273
- POJ 1273 Drainage Ditches 最大流 dinic
- 最大流之预流推进
- 最大流 : FordFulkerson 算法
- POJ1273-Drainage Ditches
- 【网络流】复杂的大门
- ACM/ICPC World Finals 2013 C Surely You Congest
- 网络流算法整理
- [BZOJ1797][AHOI2009][最大流][强连通分量]Mincut最小割
- 网络流最大流算法(ISAP算法及DINIC算法)