http://poj.org/problem?id=1273
题意:农夫的田野每次一到下雨就会被淹没,这让他很苦恼。于是修了好多渠沟,编号为1作为池塘,编号为n作为小溪,求从池塘到小溪的最大排水量。
ps:最大流第一题。
思路:花了一段时间来入门,这个是EKarp的教程,并且参考了这个代码。现在感觉这个算法好神奇。首先扩展方式精辟,按照我们普通的想法,每找到一条增广路,就将其加上求得源点的最大流。但是这样离源点近路的流量就有可能超过容量限制,解决办法自然是加判断条件。但是每一条都判断很麻烦,所以就索性变成容量相减的形式,这种减容量的方法明显要强于加流量。
整体思路是用bfs找增广路,并记录前驱。找到后逆向往回找增广路流量。流量求出后再逆向往回分别对正反流量更新。总的来说所有操作都在一个bfs操作里进行,bfs是主线。
不过最精辟的还是反向边的建立,我们再拿神图来说明: