最大流小结

昨儿看最大流,搞晕了,今天又搞了搞,感觉dinic,EK,FF算是摸清了一丢丢了.做个小结,再搞费用去.

晚上看了会儿最大流的变体,非常受用.也特此加入总结.

最大流定义神马的就不说了,说了也白说.搞了好久,最后搞明白了些反而没什么可说的了.总的来说,最大流问题有两类算法,其一为增广路算法和预流推进算法.唉,后面那种

我也不知道是甚么JB玩意儿了,前面那类就有好多种算法了,最原始的是FF算法,Ford-Fulkerson,从源点开始不停地找可增广路,然后不停增广直到终止,然后改进一下,每次

优化成从BFS找增广路,然后如果BFS失败就退出,否则就用BFS过程中保存的路径直接增广,就变成了EK算法,然后继续优化一下,BFS时分层,把各个点分成多个等级,也就是

代表着离源点的距离,这样的话后面的增广就可以直接利用这个分层结果套用DFS的回溯功能,快速地进行增广,截流了.其实都只是做了一点点优化.很多网友总喜欢评价他们

孰优孰劣,我了个擦,尼玛FF算法就已经很优秀了好么?虽然它的复杂度挺高的,但是那种最坏情况基本不可能发生的好么?

唉不说了,乖乖...

最大流的变体:

第一种是如果有多个源点和汇点的情况,这时只需要建立一个炒鸡源点和一个炒鸡汇点,然后炒鸡源点和所有源点建边,炒鸡汇点和所有汇点建边,其它的部分,节点内部的处理等等就和

之前一样了.

第二种是点流量有限制的情况.这时需要做一下转换.比如原来一个节点的流量限制是8,那么我们进行拆点,把一个点拆成两个,然后中间连一条流量为原来那个点的流量限制大小

的边即可.

第三种是有最小流量限制的情况,

第四种是求出最大流后,对原图做了部分变换的情况,

第五种是容量为负的情况(这在求最小割的时候才可能出现).

后三种对老夫来说太复杂了,现在还不能理解.如果读者看到这里的话,可以参考<<挑战程序设计竞赛>>这本书的3.5借助水流解决问题的网络流章节,那是个很屌的日本人写的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值