SPFA算法可以处理负费用边, 但是负费用环就炸了。
ZKW更傲娇,连负费用边都不能有(我也不知道为什么)。
消圈算法的强大之处在于它可以处理负费用环(边),但是它在OI算法中的效率实在不敢恭维。
那么其实增广路算法也是可以处理负费用环(边)。
1.ZKW处理一开始(题设)就有负费用边(无负环的做法)
根据大量的数据证明,ZKW跑一开始(题设)就是全部正费用的网络是不会错的。
那我们可以把每个费用都加上一个+max, 再把最后求出来的最小费用减去最大流量×max就可以得到答案。
2.最大费用最大流(一开始(题设)无正费用环)
很多同学会直接将费用想到取反直接跑费用流,SPFA当然没有问题,但是不要忘记了ZKW会出错,所以我们还要进行1操作。
3.最小(大)费用可行流:
我不会用zkw求这个,可以去他博客,我没看懂。
这个SPFA求,要是有什么负(正)权环,GG我目前也不知道怎么办?
以最小费用可行流来讲解。
每次暴力找一条费用和最小且流量大于0的增广路,然后把它流了,一直流,直到这条增广路的费用和大于0,我们就退了。
至于证明,我还是只会感性。还记得讲SPFA费用流的时候为什么求出来的费用一定是最小呢?因为每次都找得最小,所以是最小的,我们又加了一个必须小于0的限制,所以它是最小的。(纯属口胡)
至于最大费用可行流,就是找费用和最大的增广路,并且费用和大于0就行了。