AC. 梦想

frank_c1

[BZOJ 1070] 修车

发布于2016年02月26日 | 暂无评论 | 476阅读 | 线性规划与网络流,费用流

题目描述

同一时刻有N位车主带着他们的爱车来到了汽车维修中心。维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的。现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待的时间最小。 说明:顾客的等待时间是指从他把车送至维修中心到维修完毕所用的时间。

输入格式

第一行有两个m,n,表示技术人员数与顾客数。 接下来n行,每行m个整数。第i+1行第j个数表示第j位技术人员维修第i辆车需要用的时间T。

输出格式

最小平均等待时间,答案精确到小数点后2位。

题目解析

这题网络流的建模好神,很有启发~~ 自己开始实在想不出来。

首先这题一定是费用流。题目所求转化一下,就是所有顾客等待的总时间。我们把每个技术人员拆成n个点,点V(i,j)代表技术人员i修的倒数第j辆车。每辆车向所有技术人员拆成的点连一条容量为1的边,车k连向点V(i,j)的边费用为T(k,i) \times j;源向每辆车连一条容量为1,费用为0的边,所有技术人员拆成的点向汇连一条容量为1,费用为0的边。跑最小费用流即可得解。

为什么这样建模呢?首先分析容量,源向车连的边容量为1,即车最多只被修一遍;车向每个技术人员拆成的点以及技术人员拆成的点向汇连的边容量为1,即一位技术人员一次只能修一辆车。再来分析费用,如果车k和点V(i,j)连的边最终满流,就说明此时车k是技术人员i倒数第j辆车,它对总时间的贡献就是车k本身维修的时间以及排在它后面j-1位顾客等待的时间。至此,题设条件均被满足,最小费用流得到的总费用自然就是最小等待总时间。