首页 > 其他 > 详细

有上下界网络流学习笔记

时间:2019-03-21 21:54:45      阅读:155      评论:0      收藏:0      [点我收藏+]

有上下界网络流学习笔记

1.有(无)源汇有上下界最小费用可行流:算法的核心思想是补流。先判断原图是否有源汇,若有则连边\(t \to s(\infty/0)\);随后新建超级源汇\(S\)\(T\);然后对于每一条边\(x \to y\),连边\(x \to y(high-low/w)\);接着对每一个点\(x\),计\(\delta\)为该点入边流量下界之和减去该点出边流量下界之和,如果\(\delta\)为正数,说明接下来有一部分流量要从\(x\)流出,则连边\(S \to x(\delta/0)\);若\(\delta\)为负数,说明需要有一部分流量流入\(x\),则连边\(x \to T(-\delta/0)\),最后做费用流在加上必须流的费用即可。

例1.Luogu4043 支线剧情

模板题,没啥好说的。

2.无源汇有上下界可行流:算法的核心是先建出初始流,再通过补充附加流,满足流量平衡(其实和1是一样的)。建立附加源汇\(S\)\(T\),然后对于每一条边\(x \to y\),连边\(x \to y(high-low)\);接着对每一个点\(x\),计\(\delta\)为该点入边流量下界之和减去该点出边流量下界之和,如果\(\delta\)为正数,说明接下来有一部分流量要从\(x\)流出,则连边\(S \to x(\delta)\);若\(\delta\)为负数,说明需要有一部分流量流入\(x\),则连边\(x \to T(-\delta)\)。如果我们能够找到使后面所有附加上的边都满流的方案,那么我们就得到了可行流,所以对新图做最大流即可。若存在方案,那么最后每条边的流量为最大流中的流量加上原图中的流量下界。

例2.ZOJ2314

仍然是模板题。

3.有源汇有上下界最小/最大流:连边\(t \to s(\infty)\),先用2中所述方法求出可行流,然后删去\(t \to s(\infty)\),从\(s\)\(t\)在原来的残量网络上增广即可得到最大流,因为这样既不破坏流量平衡,又不会不符合上下界,同时最大化了流量;最小流有两种做法:1.因为反向边的流量增加就是正向边的流量减小,最小流是正向边流量最小化,所以\(s \to t\)最小流就是反向边流量最大化,即\(t \to s\)最大流,反过来增广即可。2.(这个做法我也不是很明白,如果有大佬知道原因,希望能给我讲解一下)先求超级源汇的最大流,然后连边\(t \to s(\infty)\),继续增广求超级源汇的最大流,答案即为新边\(t \to s(\infty)\)的实际流量,因为第一次增广时流量已经尽量往其他边流,那么加上这条新边后,就尽可能减小了最终答案。

例3.BZOJ2502

还有一些练习题,等我写了再贴在这吧。

有上下界网络流学习笔记

原文:https://www.cnblogs.com/pkh68/p/10574872.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!