设sm为所有p之和,套路地对每道菜建一个点,将每个厨师拆成sm个点,做的倒数第i道菜的代价为time*i。

S向每道菜连边<0,p[i]>(前者为代价后者为流量),i菜到j厨师的第k个点连<v[i][j]*k,1>,厨师到T连<0,1>。

但图太大了,于是动态加点。当厨师的第i个点被流完后再建第i+1个点,由于费用随i递增所以不会产生错误。

  1. #include<cstdio>
  2. #include<algorithm>
  3. #define rep(i,l,r) for (int i=(l); i<=(r); i++)
  4. #define For(i,x) for (int i=h[x],k; i; i=nxt[i])
  5. using namespace std;
  6.  
  7. const int N=,M=,inf=1e9;
  8. int n,m,ans,S,T,cnt=,sm,mn,v[][],p[],h[N],d[N],pre[N],inq[N];
  9. int to[M],nxt[M],val[M],fl[M],q[M];
  10.  
  11. void add(int u,int v,int c,int f){
  12. to[++cnt]=v; val[cnt]=c; fl[cnt]=f; nxt[cnt]=h[u]; h[u]=cnt;
  13. to[++cnt]=u; val[cnt]=-c; fl[cnt]=; nxt[cnt]=h[v]; h[v]=cnt;
  14. }
  15.  
  16. bool spfa(){
  17. rep(i,,T) pre[i]=-,inq[i]=,d[i]=inf;
  18. d[S]=; inq[S]=; q[]=S;
  19. for (int st=,ed=; st!=ed; ){
  20. int x=q[++st]; inq[x]=;
  21. For(i,x) if (fl[i] && d[k=to[i]]>d[x]+val[i]){
  22. d[k]=d[x]+val[i]; pre[k]=i;
  23. if (!inq[k]) inq[k]=,q[++ed]=k;
  24. }
  25. }
  26. return d[T]!=inf;
  27. }
  28.  
  29. void mcmf(){
  30. for (ans=; spfa(); ans+=d[T]*mn){
  31. mn=inf;
  32. for (int i=pre[T]; ~i; i=pre[to[i^]]) mn=min(mn,fl[i]);
  33. for (int i=pre[T]; ~i; i=pre[to[i^]]){
  34. fl[i]-=mn; fl[i^]+=mn;
  35. if (to[i]==T && (to[i^]-n)%sm){
  36. int k=to[i^]+,x=(to[i^]-n)/sm+,y=(to[i^]-n)%sm+; add(k,T,,);
  37. rep(j,,n) add(j,k,v[j][x]*y,);
  38. }
  39. }
  40. }
  41. }
  42.  
  43. int main(){
  44. freopen("bzoj2879.in","r",stdin);
  45. freopen("bzoj2879.out","w",stdout);
  46. scanf("%d%d",&n,&m);
  47. rep(i,,n) scanf("%d",&p[i]),sm+=p[i];
  48. rep(i,,n) rep(j,,m) scanf("%d",&v[i][j]);
  49. S=n+m*sm+; T=S+;
  50. rep(i,,n) add(S,i,,p[i]);
  51. rep(i,,m) add(n+(i-)*sm+,T,,);
  52. rep(i,,n) rep(j,,m) add(i,n+(j-)*sm+,v[i][j],);
  53. mcmf(); printf("%d\n",ans);
  54. return ;
  55. }

[BZOJ2879][NOI2012]美食节(费用流)的更多相关文章

  1. [BZOJ2879] [Noi2012] 美食节 (费用流 & 动态加边)

    Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...

  2. 【bzoj2879】[Noi2012]美食节 费用流+动态加边

    原文地址:http://www.cnblogs.com/GXZlegend 题目描述 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他 ...

  3. [NOI2012]美食节(费用流)

    题目描述 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽管所有的菜品都 ...

  4. [NOI2012]美食节——费用流(带权二分图匹配)+动态加边

    题目描述 小M发现,美食节共有n种不同的菜品.每次点餐,每个同学可以选择其中的一个菜品.总共有m个厨师来制作这些菜品.当所有的同学点餐结束后,菜品的制作任务就会分配给每个厨师.然后每个厨师就会同时开始 ...

  5. BZOJ 2879: [Noi2012]美食节( 费用流 + 动态加边 )

    倒着做菜..然后考虑为当前的人做菜对后面的人的影响就可以了..要动态加边 --------------------------------------------------------------- ...

  6. BZOJ.2879.[NOI2012]美食节(费用流SPFA)

    题目链接 /* 同"修车":对于每个厨师拆成p个点表示p个时间点,每个人向m个厨师每个时间点连边 这样边数O(nmp)+网络流 ≈O(nm*p^2)(假设SPFA线性) = GG ...

  7. 【BZOJ 2879】[Noi2012]美食节 费用流

    思路同修车,就是多了一个骚气的操作:动态加边,我们通过spfa流的过程可以知道,我们一次只会跑一流量,最后一层边跑过就不会再悔改,所以说我们只会用到一大片里面的很少的点,所以我们如果可以动态加边的话我 ...

  8. BZOJ 2879 [Noi2012]美食节 | 费用流 动态开点

    这道题就是"修车"的数据加强版--但是数据范围扩大了好多,应对方法是"动态开点". 首先先把"所有厨师做的倒数第一道菜"和所有菜连边,然后跑 ...

  9. [NOI2012][bzoj2879] 美食节 [费用流+动态加边]

    题面 传送门 思路 先看看这道题 修车 仔细理解一下,这两道题是不是一样的? 这道题的不同之处 但是有一个区别:本题中每一种车有多个需求,但是这个好办,连边的时候容量涨成$p\lbrack i\rbr ...

随机推荐

  1. python f-string

    文章目录 1. 主要内容 1.1. 旧时代的格式化字符串 1.1.1. Option #1: %-formatting 1.1.2. 怎样使用 %-formatting 1.1.3. 为什么 %-fo ...

  2. python之random模块分析(一)

    random是python产生伪随机数的模块,随机种子默认为系统时钟.下面分析模块中的方法: 1.random.randint(start,stop): 这是一个产生整数随机数的函数,参数start代 ...

  3. GCC的符号可见性——解决多个库同名符号冲突问题

    引用自:https://github.com/wwbmmm/blog/wiki/gcc_visibility 问题 最近项目遇到一些问题,场景如下 主程序依赖了两个库libA的funcA函数和libB ...

  4. 安装VNC

    一.安装相应桌面环境与vnc服务端和客户端: # yum groupinstall "GNOME Desktop Environment"(CentOS 5.x安装GNOME桌面环 ...

  5. 泰克TDS1000B示波器使用说明

    1.前言 本文主要根据泰克官方网站TDS1000B/TDS2000B使用教程视频进行整理. 2.认识你的示波器 TDS1000B带宽从40MHZ到200MHZ,采样率高达2Gbps

  6. mysql系列九、mysql语句执行过程及运行原理(分组查询和关联查询原理)

    一.背景介绍 了解一个sql语句的执行过程,了解一部分都做了什么,更有利于对sql进行优化,因为你知道它的每一个连接.where.分组.子查询是怎么运行的,都干了什么,才会知道怎么写是不合理的. 大致 ...

  7. oracle instantclient_11_2插件安装

    1.安装plsql 2.instantclient_11_2下载,解压到目录 D:\DevTools\instantclient_11_2 3.打开plsql, 点击“取消” 4.选择“工具”--&g ...

  8. Oracle11默认用户名和密码

    安装Oracle时,若没有为下列用户重设密码,则其默认密码如下: 用户名 / 密码                      登录身份                              说明s ...

  9. PhpStrom添加调试功能

    要给PhpStrom添加调试功能,需要安装Xdebug,网址:https://xdebug.org/ 1.如何下载对应thinkphp版本号的Xdebug呢 创建一个php文件,在里面输入phpinf ...

  10. python之鸭子类型

    python不支持多态,也不用支持多态,python是一种多态语言,崇尚鸭子类型. 在程序设计中,鸭子类型是动态类型的一种风格,不是由继承特定的类或实现特定的接口,而是当前的方法和属性的集合决定,鸭子 ...