【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、算法复杂度和优化



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值