Description
Input
Output
Sample Input
3 2
1 4
Sample Output
HINT
数据范围:
(2<=M<=9,1<=N<=60), (1<=T<=1000)
求平均费用这个有点无趣啊。。人数给定了其实只要求出最少的总时间花费就行了、、不用搞什么分数规划。
这题费用流的算法是很明显的啦、就是构图很巧妙~~
N辆车,M个工人。
把每个工人拆成N个点。记为A[i,j]表示第i个工人修倒数第j辆车。
每个车跟所有N*M个工人拆出的点连边。流量为1,费用为time[i,j]*k。
源和每辆车连边,N*M个点和汇连边,流量都为1,费用同为0。
为什么这么构图呢?
考虑第i个工人,他修第j辆车只对后面要修的车有影响,而前面修过的车已经对当前没有影响了。
而这个影响就是后面每个将要修理的车都多等待了time的时间。
其他边流量都为1是显然的,每辆车修一次,每个工人一个时段只能修理一辆车。
跑一遍费用流,出解、、
AC CODE
program bzoj_1070;
var line,capa,cost,next:array[1..66000] of longint;
//============================================================================
procedure ins(x,y,z1,z2:longint);
begin
end;
//============================================================================
procedure init;
var i,j,k,m:longint;
begin
end;
//============================================================================
function dfs(u,flow:longint):longint;
var v,i,rest,tmp,l:longint;
begin
end;
//============================================================================
procedure zkw;
var flow,i,tmp:longint;
begin
end;
//============================================================================
begin
end.