bzoj1221

时间:2022-06-25 10:15:26

网络流与线性规划24题中的餐巾计划吧
明显要拆点吧,把每一天拆成2个点,i,i+n
起点   终点    容量    费用
 s      i      inf      c    每天都可以购买新毛巾
 i      t      ni       0    每天的需求
 s      i+n    ni       0    每天可能被洗的餐巾
i+n    i+n+1   inf      0    当前所有待洗的餐巾都可以等到下一天在洗(某种意义上相当于提前洗好了存起来)
i+n    i+a+1   inf     ca    快速清洗a天后可用(注意这里使用的那天不洗,所以是第i+a+1天可以投入使用)
i+n    i+b+1   inf     cb    同理

 const inf=;
type node=record
next,point,flow,cost:longint;
end; var edge:array[..] of node;
pre,p,d,cur:array[..] of longint;
q:array[..] of longint;
v:array[..] of boolean;
x,ans,len,fm,sm,fw,sw,c,n,i,w,t:longint; function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end; procedure add(x,y,f,w:longint);
begin
inc(len);
edge[len].point:=y;
edge[len].flow:=f;
edge[len].cost:=w;
edge[len].next:=p[x];
p[x]:=len;
end; function spfa:boolean;
var f,r,i,x,y:longint;
begin
f:=;
r:=;
q[]:=;
fillchar(v,sizeof(v),false);
v[]:=true;
for i:= to t do
d[i]:=inf;
d[]:=;
while f<=r do
begin
x:=q[f];
v[x]:=false;
i:=p[x];
while i<>- do
begin
y:=edge[i].point;
if edge[i].flow> then
if d[y]>d[x]+edge[i].cost then
begin
d[y]:=d[x]+edge[i].cost;
cur[y]:=i;
pre[y]:=x;
if not v[y] then
begin
v[y]:=true;
inc(r);
q[r]:=y;
end;
end;
i:=edge[i].next;
end;
inc(f);
end;
if d[t]=inf then exit(false) else exit(true);
end; procedure mincost;
var neck,i,j:longint;
begin
while spfa do
begin
i:=t;
neck:=inf;
while i<> do
begin
j:=cur[i];
neck:=min(edge[j].flow,neck);
i:=pre[i];
end;
i:=t;
while i<> do
begin
j:=cur[i];
dec(edge[j].flow,neck);
inc(edge[j xor ].flow,neck);
i:=pre[i];
end;
ans:=ans+neck*d[t];
end;
end; begin
readln(n,fm,sm,c,fw,sw);
len:=-;
fillchar(p,sizeof(p),);
t:=*n+;
for i:= to n do
begin
read(x);
add(i,t,x,);
add(t,i,,);
add(,i,inf,c);
add(i,,,-c);
add(,i+n,x,);
add(n+i,,,);
end;
for i:= to n do
begin
w:=i+fm+;
if w<=n then
begin
add(i+n,w,inf,fw);
add(w,i+n,,-fw);
end;
w:=i+sm+;
if w<=n then
begin
add(i+n,w,inf,sw);
add(w,i+n,,-sw);
end;
if i+<=n then
begin
add(i+n,i+n+,inf,);
add(i+n+,i+n,,);
end;
end;
mincost;
writeln(ans);
end.

相关文章