网络流,顾名思义,是求网络中的流量。
这里的教程比较容易理解
主要性质:
(lyd:网络流模型可以形象的描述为:在不超过流量限制的前提下,“流”从原点不断产生,流经整个网络,最终全部归于汇点。)
增广路:如果一条从起点到终点的路径上剩余流量都大于零,则最大流可以加上这条边流量的瓶颈,即这条路径上的最小剩余流量。EK的思想就是不断寻找增广路,直到找不到增广路为止。
具体实现:每次用BFS寻找增广路,若找到了,则将这条路径上的所有边减少增加的流量,还要把其反向边的流量增加相同的数值,重复上述过程,直到找不到增广路。
为什么要增加反向边的流量?因为算法不能保证每次找到的都是最优解。而构建反向边,则给了程序一个“反悔”的机会。在构建反向边后,如果另一条增广路需要经过已经寻找到增广路上的边,而这条边已经没有剩余流量了,就可以让原来的那条增广路走另一条路,这样又可以拓展出一条增广路。
如图,若 是一条增广路,当寻找从 点的增广路时可以把 点的部分流量导到B点,即A的流量就变成了 和 两条。再拓展 这条路,就使得答案增加了。这一操作其实就等价于反向边上增加流量,因为反向边上增加多少,正向边就减少多少。