标签:fill 初始 lin 垃圾 amp name and contain std
哦末,刚学了费用流,就来造福人民,哈哈,大佬勿喷(其实是GDOI爆零,心情不好写一篇博客安慰自己)
好了,回归正题,这里我只讲费用流的两种方法(没有负权环)
一样的,建反向边,然后就开始操作了!
首先,是MCMF费用流,即连续用SPFA计算从起点到终点的最小费用,在进行SPFA中顺带记录流量、前一个点、前一条边,然后,就。。。从终点回去更新一路到起点就行了,先给出SPFA(为什么会对?找最短费用,然后还有反向边后悔,为什么不行?):
下面给出将边修改的过程:
然后,吗。。。再来个主函数(感觉好鸡肋得主函数):
ZKW大佬优化后的ZKW牌费用流(祛风除湿止痛费用流哟,年轻人):
大佬的方法就是找到多条增广路,用SPFA找到多条增广路(从终点开始计算(然而从起点开始好像也无所谓啦!但是,作者用自己的亲身试验证明,会慢!╯﹏╰,不知为什么))。
如图:
这张图,明显用MCMF要两次SPFA,但是,SPFA的特点是可以计算出所有点离起点有多远!所以,咱们可以用一次递归来找出所有最短路径。
ZKW费用流的SPFA
牛逼的!主函数:
然而。。。
还可以更优!
细心的同学可以发现了一个尴尬的情况:
但是:
于是,当找到t>0时,break;就可以了!
但是,你又会发现,不断的break,多次递归,太慢了。
于是,你可以将递归加个回溯,这就快多了:
find函数:
主函数:
最后,贴上整个代码,祝大家学会网络流:
最后,总结一下,稀疏图用MCMF会快(很暴力,我喜欢!),稠密图还是用ZKW费用流吧(多条的增光路哟,年轻人!)
(大佬表示:垃圾,没证明)(萌新表示:垃圾,看不懂!)(我:但是我可以秀图!)
注:上面的图片侵权抱歉!
标签:fill 初始 lin 垃圾 amp name and contain std
原文地址:https://www.cnblogs.com/zhangjianjunab/p/9694682.html