【DayDayUp】【算法_图_网络流_之三_最小费用最大流】(待补全)

【坚持不能偷懒】

网络流这块有点懵逼,所以一起搞一下

最小费用最大流,下面介绍的是常规做法,比较裸


思路是:

记Flow为剩余流量,Cost为单位流量价格,S为源点,T为汇点

每次在【剩余图】中增广一条【最小单位流量费用】的增广路

怎么做到呢,凡是Flow不为0,表示一条路可以走

然后我们找一条S到T的(可以走的,最小Cost和的路)

那么从S到T的【单位流量消耗】是最小的

然后,看看这条路能提供多少流量

找这条路就很easy了,直接把Cost当作距离,Flow不为0作为是否存在路径

跑一发最短路,通常用的是SPFA跑


建图就是

正向边的流量为 flow 单价为   cost 

反向边的流量为 0 单价为 - cost


PS:裸的SPFA遇到负环会懵逼,但网上套板子过了到题,好像没管


POJ 2135

N点M边,无向非完全图,边上有权重(代价)

问从N走到M再回来,一条边最多走一次的最小代价

解:

建一个S到1,flow = 2 cost = 1

建一个N到T,flow = 2 cost = 1

然后对于 from to cost 的无向边

建 from to flow = 1 cost 

和 to from flow = 1 cost 的两条边

这样跑出来的最大流就是结果

http://blog.csdn.net/stillxjy/article/details/52047189

模板参考如上blog

注意的是,初始化的时候,点数因为要加上自己做的大源点和大汇点

初始化的n是n+2,不然跑不出来……(这是血泪的教训)



——————————待补全———————————

1、SPFA跑负环会炸毛么

2、路径怎么搞出来

3、算法复杂度和优化



你可能感兴趣的:(算法_图)