网络流算是很早之前学过的知识点了 当时只是简单学习了一下上下界网络流的内容 现在来深剖本质了.
首先 网络流 在一个网络之中有流的存在 且是流量守恒的。
上下界网络流则是 网络中的每一条边都有上下界 流经这条边的流量必须满足这个上下界。
首先讨论一下无源汇上下界网络流。
无源无汇 说明图中存在一股流循环往复的流 这种流叫做循环流且满足我们的上下界。
显然如果存在合法的循环流 那么每条边的流量一定是大于下界的。
于是乎我们先让所有的下界流都先流过 此时发现了流量是不守恒的,体现在每个点的进入流量和流出流量上面。
所以我们进一步得到了 一张网络图上是循环流的条件:所有的点满足流入量=流出量。
接下来是调整流了 我们把残余网络建出来 由于只需要用加流不需要再退流 此时网络上每条边只有上界流量了。
考虑把我们的附加流求出来+初始的下界流即可得到循环流。
考虑初始的某个点x 如果初始的时候流入量>流出量 那么附加流的时候应该满足流入量<流出量。
数值还应该相等才对,我们想要再流出这么多流显然我们应该有这么多流才行 虚建源点加上这么多流让其跑流即可。
至于相反的情况是 流入量>流出量 我们流入显然是其他点要给我们流入我们只需要把流出的这么多流走即可 和虚建汇点相连接流即可.
显然我们求出了最大流 就是一组合法的解。显然正确,但是采用这种方法构造值得揣摩把dinic用的活灵活现的...
原文:https://www.cnblogs.com/chdy/p/12284971.html