zoukankan      html  css  js  c++  java
  • bzoj1221

    网络流与线性规划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    同理

      1 const inf=100000007;
      2 type node=record
      3        next,point,flow,cost:longint;
      4      end;
      5 
      6 var edge:array[0..2001000] of node;
      7     pre,p,d,cur:array[0..2010] of longint;
      8     q:array[0..2001000] of longint;
      9     v:array[0..2010] of boolean;
     10     x,ans,len,fm,sm,fw,sw,c,n,i,w,t:longint;
     11 
     12 function min(a,b:longint):longint;
     13   begin
     14     if a>b then exit(b) else exit(a);
     15   end;
     16 
     17 procedure add(x,y,f,w:longint);
     18   begin
     19     inc(len);
     20     edge[len].point:=y;
     21     edge[len].flow:=f;
     22     edge[len].cost:=w;
     23     edge[len].next:=p[x];
     24     p[x]:=len;
     25   end;
     26 
     27 function spfa:boolean;
     28   var f,r,i,x,y:longint;
     29   begin
     30     f:=1;
     31     r:=1;
     32     q[1]:=0;
     33     fillchar(v,sizeof(v),false);
     34     v[0]:=true;
     35     for i:=1 to t do
     36       d[i]:=inf;
     37     d[0]:=0;
     38     while f<=r do
     39     begin
     40       x:=q[f];
     41       v[x]:=false;
     42       i:=p[x];
     43       while i<>-1 do
     44       begin
     45         y:=edge[i].point;
     46         if edge[i].flow>0 then
     47           if d[y]>d[x]+edge[i].cost then
     48           begin
     49             d[y]:=d[x]+edge[i].cost;
     50             cur[y]:=i;
     51             pre[y]:=x;
     52             if not v[y] then
     53             begin
     54               v[y]:=true;
     55               inc(r);
     56               q[r]:=y;
     57             end;
     58           end;
     59         i:=edge[i].next;
     60       end;
     61       inc(f);
     62     end;
     63     if d[t]=inf then exit(false) else exit(true);
     64   end;
     65 
     66 procedure mincost;
     67   var neck,i,j:longint;
     68   begin
     69     while spfa do
     70     begin
     71       i:=t;
     72       neck:=inf;
     73       while i<>0 do
     74       begin
     75         j:=cur[i];
     76         neck:=min(edge[j].flow,neck);
     77         i:=pre[i];
     78       end;
     79       i:=t;
     80       while i<>0 do
     81       begin
     82         j:=cur[i];
     83         dec(edge[j].flow,neck);
     84         inc(edge[j xor 1].flow,neck);
     85         i:=pre[i];
     86       end;
     87       ans:=ans+neck*d[t];
     88     end;
     89   end;
     90 
     91 begin
     92   readln(n,fm,sm,c,fw,sw);
     93   len:=-1;
     94   fillchar(p,sizeof(p),255);
     95   t:=2*n+1;
     96   for i:=1 to n do
     97   begin
     98     read(x);
     99     add(i,t,x,0);
    100     add(t,i,0,0);
    101     add(0,i,inf,c);
    102     add(i,0,0,-c);
    103     add(0,i+n,x,0);
    104     add(n+i,0,0,0);
    105   end;
    106   for i:=1 to n do
    107   begin
    108     w:=i+fm+1;
    109     if w<=n then
    110     begin
    111       add(i+n,w,inf,fw);
    112       add(w,i+n,0,-fw);
    113     end;
    114     w:=i+sm+1;
    115     if w<=n then
    116     begin
    117       add(i+n,w,inf,sw);
    118       add(w,i+n,0,-sw);
    119     end;
    120     if i+1<=n then
    121     begin
    122       add(i+n,i+n+1,inf,0);
    123       add(i+n+1,i+n,0,0);
    124     end;
    125   end;
    126   mincost;
    127   writeln(ans);
    128 end.
    129 
    130  
    View Code
  • 相关阅读:
    HDU 1150 Machine Schedule(二分匹配最小点覆盖)
    CodeForces 748F Santa Clauses and a Soccer Championship
    CodeForces 748E Santa Claus and Tangerines(二分)
    CodeForces 748D Santa Claus and a Palindrome (贪心+构造)
    POJ 3657 Haybale Guessing(二分+并查集)
    【JZOJ5773】简单数学题【数论,数学】
    【洛谷P4085】Haybale Feast【分块】
    【洛谷P4085】Haybale Feast【分块】
    【洛谷P4085】Haybale Feast【分块】
    【洛谷P4212】外太空旅行【随机】【贪心】
  • 原文地址:https://www.cnblogs.com/phile/p/4473087.html
Copyright © 2011-2022 走看看