题目大意如下:
一个车站有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),可以在时间内岀解。