这道题还是比较简单的费用流,由于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. 打破常规——大胆尝试在路由器上搭建SVN服务器

    注册博客园挺久了,一直比较懒,虽然有几次想写点文章,但是一直没有行动,今天给大家带来一篇比较有意思的文章,不涉及技术上的,希望大家轻拍.本文的文字和图片全部为原创,尊重作者转载请注明出处! 说起路由器 ...

  2. ScrollBox 响应鼠标滚轮和ComboBox禁止滚动

    procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: ...

  3. LM算法

    最小二乘法的概念 最小二乘法的目标:求误差的最小平方和,对应有两种:线性和非线性. 线性最小二乘的解是closed-form即x=(A^T A)^{-1}A^Tb, 而非线性最小二乘没有closed- ...

  4. 求小于等于n的所有素数

    题目:要求输出所有小于等于n的素数(n>=2,且为正整数) 要求:1.每行输出10个素数 2.尽可能采用较优算法 #include<iostream> #include<cma ...

  5. 使用Chrome+node-inspector查找NodeJS内存泄漏

    关键字:NodeJS, 内存泄漏,node-inspector,Chrome OS:Windows 10 本文介绍如何使用node-inspector+Chrome查找nodejs内存泄漏. 1.创建 ...

  6. .NET安装和配置Oracle数据访问组件(ODAC)

    Many ASP.NET applications access Oracle database for the data source. Oracle supports the .NET with ...

  7. 【 Quartz】使用 JobListener (任务监听器可实现) 我想在一个任务执行后在执行第二个任务怎么办呢

    http://liuzidong.iteye.com/blog/1147528 Quartz之JobExecutionException 博客分类: Java Quartz quartzjobexec ...

  8. 从JAVA多线程理解到集群分布式和网络设计的浅析

    对于JAVA多线程的应用非常广泛,现在的系统没有多线程几乎什么也做不了,很多时候我们在何种场合如何应用多线程成为一种首先需要选择的问题,另外关于java多线程的知识也是非常的多,本文中先介绍和说明一些 ...

  9. ServiceStack.Redis

    什么是Redis 首先,简述一下什么是Redis. Redis是一个开源.支持网络.基于内存.键值对存储数据库,使用ANSI C编写.从2013年5月开始,Redis的开发由Pivotal赞助.在这之 ...

  10. PHP htmlspecialchars() 函数

    定义和用法 htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体. 预定义的字符是: & (和号) 成为 & " (双引号) 成为 " ...