【最小费用最大流】火车问题

本文探讨了一个关于车站货车调度的问题,通过转化为最小费用最大流问题来解决。文章详细介绍了如何构建网络流图,并针对不同情况讨论了如何连接各节点以达到最优解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大意如下:

      一个车站有N条车道(N<=10),将会经过M辆货车(M<=100),每辆货车停在车站可以产生Ci的收益,但要占用一条车道一段时间(Ri-Li),求最大获益。

      求最大获利不妨转化成最小损失,每漏掉一辆货车损失Ci,马上可以想到最小费用最大流。

      每个点(车)都要求有1的流量经过,那么把这个点拆成两个点,之间连一条边容量为1,最后的答案是使得这类边满流的费用最小的可行流。

      因此这些点都要得到1的流量,那么不妨把它看成一个入点一个出点,现在更加详细的分析下:

           1. 每个入点必须得到1的流量,每个出点必须释放1的流量,那么S向入点连一条容量为1的边,出点向T连一条容量为1的边,因为这出点些边一定会满留;

           2.某个点可能从另外一个点那里接受1的流量,前提是这两辆车的时间不冲突,那么这样的两个点连一条容量为1的边;

           3.某辆车自己新开一个道,但是可以知道最多只有N辆车有这种待遇,那么建一个特殊点,S向他连一条容量为N的边,他向每个入点连一条容量为1的边;

           4.某辆车被放跑了!这里要注意,他既不会从以上2、3点的方式得到流量,也不会通过2、3点的方式给其他入点流量,也就是说要同时限制住入点和出点(一开始没注意,无限WA),那么用入点向出点连一条容量为1,费用为Ci的边。

      最后答案就是sigmaCi-费用;

      复杂度分析:spfa费用流的最坏复杂度是O(NM*MAXflow);这里MAXflow=M,所以复杂度最坏为O(M4),可以在时间内岀解。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值