zkw算法

最小费用最大流问题

顾名思义在最大流问题的基础上附加了费用最小的条件,已经是一个毫不陌生的问题了。

zkw算法

(orzZKW大神)
费用流经典的做法是最短路做法,然而zkw也利用了最短路思想却没用使用spfa,dij等常用最短路算法,而是类似于km算法,用顶标来维护图的最短路性质。
任何一个最短路算法保证,算法结束后有,对于任意从u到v的边,dis[u]<=dis[v]+ w[u][v] (这里的dis表示到汇点的距离而不是到源点的距离)(性质1),且对于每一个u至少有一个v使得等号成立(性质2)。在最小费用流的计算中, 我们每次沿 dis[u] = dis[v] + w[u][v] 的路径增广后都不会破坏性质 1,但有可能破坏性质2,所以可能出现找不到增广路的情况,这时候,我们就要类似于km算法那样,修改顶标。
回顾一下 KM 算法修改顶标的方法. 根据最后一次寻找交错路不成功的 DFS, 找到d=Min{A[ Xi ]+B[Yj]-w[Xi,Yj] | Xi在交错树中,Yj不在交错树中} Yj增加 d , Xi减少 d . 这里也一样, 根据最后一次寻找增广路不成功的 DFS, 找到 d = Min{dis[v]+ w[u][v] -dis[u]} , 所有访问过的点距离标号增加 d. 可以证明, 这样不会破坏性质 1, 而且至少有一条新的边进入了 dis[u] = dis[v] + w[u][v] 的子图。

小结

zkw算法常数小,编程复杂度低,也不难理解,是我这种蒟蒻学习费用流算法的不二选择。

你可能感兴趣的:(zkw算法,费用流)