上下界网络流学习小记

写在前面

网络流是信息学竞赛中几乎必考的一个模型。而上下界网络流也是网络流问题中的一个大类,出题很灵活。
今年冬天第一次接触上下界之后果断滚粗,于是便恶补了一下上下界,大体有两种方法。

可行流

首先建立超级源和超级汇,ss,tt。然后把每条边拆成三条边,对于每条u->v,上界为up,下界为low的边,从ss向v连容量为low的边,从u向tt连容量为low的边,再从u向v连容量为up-low的边。若有源汇则从T向S连容量为+∞的边。证明可以感性理解,因为每条边必须要流low的流量,于是我们就从ss开始强制流low,通过T回到S,再回到tt,从而保证强制性和流量守恒。判断是否可行就相当于判断从ss流出去的边是否都流满就可以了。

最小费用可行流

可以在可行流的方法上,在从ss到v的边和从u到v的边加上费用c即可。感性理解理解。
也可以把每一条必流的边上的费用减去一个inf,最后答案加回。注意流量守恒。(表示这个方法我也没怎么理解)

最大流

二分一个x,在可行流的基础上,把从T到S的边的下界变为x,然后判断是否存在可行流,最大的x即为所求。
也可以先求一遍从ss到tt的最大流,设为tmp1,然后删去所有和ss、tt有关的边,再求一遍从S到T的最大流(貌似T到S的边不用删?),设为tmp2,答案即为tmp1+tmp2?
感性理解可以认为第一次流是为了满足下界,第二次便是尽可能去流,加起来即为最大流。

最小流

这东西只会在上下界网络流中出现。
同样二分,把从T到S的边的上界变为x,下界为0。
也可以不加T到S的边,求ss到tt的最大流,然后再把这条边加上,再求ss到tt的最大流,这时这条边上的流量即为最小流。(不要问为什么)

参考资料:WerKeyTom_FTD的博客
%%%

例题

供电网络
支线剧情

你可能感兴趣的:(网络流,上下界网络流,上下界费用流)