上次“参观”华工校赛,G题“A Mincost—Maxflow Problem” 引发了对费用流中负权回路的思考
这题目是单纯的模板题,不想再提了~~
下面说一下消圈:
有负权回路的图是不可能球出最短路的,所以增广算法不能发挥用处,那我们可不可以通过修改权值从而消去负边??
答案当然是肯定的:(以下操作的前提是网络已经建好,并且初始流量是0)
c (容量) f (流量) cost(费用)
(1)先使所有负边满流(注意残留网络的变化),计算每个节点的盈余流(设e [i] >0 为流入大于流出)
(2)建立一个额外的 S‘ 和 T’
对于每个节点i(e[i] >0) 连一条边 S‘ --> i (c = e[i], cost = 0)
对于每个节点j(e[j] <0) 连一条边 j -- > T’ (c = -e[j], cost = 0)
(3)求解关于源 S‘ 和汇 T’ 的最小费用最大流(得到一个原网络的可行流——负环流)
(4)对于原来网络中的 S 和 T 求解最小费用最大流
理解的关键是残留网络的变化
代码先空着