这道题还是比较简单的费用流,由于w是递增的

实际上,这题数据还可以强一点,比如说分段函数不保证费用递增,

就要加一点技巧了(要保证函数的顺序)

 const inf=;
type node=record
       next,point,flow,cost:longint;
     end;
var q:array[..] of longint;
    edge:array[..] of node;
    v:array[..] of boolean;
    p,time,c,d,pre:array[..] of longint;
    len,i,j,n,m,t,total,s,w,x:longint;
    ans:int64; 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 i,j,f,r,x,y:longint;
  begin
    fillchar(v,sizeof(v),false);
    v[]:=true;
    for i:= to t do
      d[i]:=inf;
    d[]:=;
    f:=;
    r:=;
    q[]:=;
    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;
            pre[y]:=i;
            time[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 i,j,x,y,neck:longint;
  begin
    while spfa do
    begin
      neck:=inf;
      i:=t;
      while i<> do
      begin
        j:=pre[i];
        if neck>edge[j].flow then neck:=edge[j].flow;
        i:=time[i];
      end;
      i:=t;
      while i<> do
      begin
        j:=pre[i];
        dec(edge[j].flow,neck);
        inc(edge[j xor ].flow,neck);
        i:=time[i];
      end;
      ans:=ans+neck*d[t];
    end;
  end; begin
  readln(n,m);
  len:=-;
  fillchar(p,sizeof(p),);
  for i:= to m do
  begin
    read(c[i]);
    add(,i,c[i],);
    add(i,,,);
  end;
  for i:= to n do
  begin
    for j:= to m do
    begin
      read(x);
      if x= then
      begin
        add(j,i+m,c[j],);
        add(i+m,j,,);
      end;
    end;
  end;
  t:=n+m+;
  for i:= to n do
  begin
    readln(s);
    fillchar(time,sizeof(time),);
    for j:= to s do
      read(time[j]);
    for j:= to s do
    begin
      read(w);
      add(i+m,t,time[j]-time[j-],w);
      add(t,i+m,,-w);
    end;
    read(w);
    add(i+m,t,inf,w);
    add(t,i+m,,-w);
  end;
  mincost;
  writeln(ans);
end.

bzoj2245的更多相关文章

  1. 【bzoj2245】 SDOI2011—工作安排

    http://www.lydsy.com/JudgeOnline/problem.php?id=2245 (题目链接) 题意 n个产品,每个需要造C[i]件:m个员工,每个员工可以制造一些产品:每个员 ...

  2. 【BZOJ2245】[SDOI2011]工作安排(费用流)

    [BZOJ2245][SDOI2011]工作安排(费用流) 题面 BZOJ 洛谷 题解 裸的费用流吧. 不需要拆点,只需要连边就好了,保证了\(W_j<W_{j+1}\). #include&l ...

  3. 【BZOJ2245】[SDOI2011]工作安排 拆边费用流

    [BZOJ2245][SDOI2011]工作安排 Description 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被 ...

  4. [bzoj2245][SDOI2011]工作安排(费用流)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2245 分析: 要注意到题目下面说的w是单增的 明显的费用流: 弄个源点S,汇点T S连 ...

  5. bzoj2245: [SDOI2011]工作安排

    费用流. 这道题的模型比较明显,拆点也是很容易看出来的. #include<cstdio> #include<algorithm> #include<cstring> ...

  6. [SDOI2011]工作安排 BZOJ2245

    分析: 费用流裸题,按照题面要求建边就可以了,语文题,我读了10多分钟才知道这题干啥...特别是注意一个细节a[j+1]-a[j]... 附上代码: #include <cstdio> # ...

  7. [bzoj2245][SDOI2011]工作安排——费用流

    题目大意: 传送门 题解: 很容易建模,把每一个工作人员拆成两个点,由第一个点向第二个点连S+1条边即可. 这水题没什么难度,主要是longlong卡的丧心病狂... 代码 #include < ...

  8. 【bzoj2245】[SDOI2011]工作安排 费用流

    题目描述 你的公司接到了一批订单.订单要求你的公司提供n类产品,产品被编号为1~n,其中第i类产品共需要Ci件.公司共有m名员工,员工被编号为1~m员工能够制造的产品种类有所区别.一件产品必须完整地由 ...

  9. [SDOI2011][bzoj2245] 工作分配 [费用流]

    题面 传送门 思路 数据范围n,m<=250 分配任务问题 这是典型的"看到数据范围就知道算法"类型 而且我们发现我们要保证一定产出的情况下最小化花费 这句话等价于保证一定流 ...

随机推荐

  1. C#向C++编写的DLL传递字符串参数的办法

    使用StringBuilder,举例: C++代码中函数定义如下: PVPOWERFORCASTDLL_API int PVPowerForcast(SForcastInfo &_Forcas ...

  2. couldnt resolve host mirrorlist.centos

     解决centos 6.3 yum安装软件时找不到镜像问题 [root@nagios-server ~]# yum update –y Loaded plugins: fastestmirror Lo ...

  3. Asp.net之LINQ入门视频教程

    当前位置: 主页 > 编程开发 > Asp.net视频教程 > Asp.net之LINQ入门视频教程 > http://www.xin1234.com/Program/Aspn ...

  4. redis缓存的安装和使用

    Redis介绍    Redis本质上一个Key/Value数据库,与Memcached类似的NoSQL型数据库,但是他的数据可以持久化的保存在磁盘上,解决了服务重启后数据不丢失的问题,他的值可以是s ...

  5. MYSQL系列1_MySQL的安装,可视化工具的使用,以及建库建表等

    大家都知道MYSQL是开源的数据库,现在MYSQL在企业中的使用也越来越多,本人之前用过SQL SERVER数据库,因业务需要和自己的兴趣想要学习MYSQL,对于MYSQL,本人还是新手,请大家多多指 ...

  6. python学习笔记6(字典)

    映射:键值对的关系,键(key)映射值(value) 字典是Python唯一的映射类型 >>> phonebook = {'} >>> phonebook {'} ...

  7. Jplayer(转)

    Jplayer必须要加载 1.样式  jplayer.blue.monday.css 2.jq jquery.1.6.2.min.js 当前最新版本为1.6.2 3.jplayer的js jquery ...

  8. 1030: [JSOI2007]文本生成器 - BZOJ

    Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群,他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是 ...

  9. 一个 XSD 实例

    一个 XSD 实例 本节会为您演示如何编写一个 XML Schema.您还将学习到编写 schema 的不同方法. XML 文档 让我们看看这个名为 "shiporder.xml" ...

  10. 现代浏览器原生js获取id号方法

    <div id="tests" class="a b c" style="color:#f00">123</div> ...