就是bzoj1070的加强版,数据规模扩大了n倍,这样要是一次把所有边都加进去的话就爆炸了,,所以使用单路增广,增广过一条边后在加入下一条边。

  1.   //By hzwer
    1 #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4.  
  5. #define inf 0x7fffffff
  6. #define T 100001
  7.  
  8. using namespace std;
  9.  
  10. int n,m,tot,cnt=,ans,t[][];
  11. int c[],d[],q[],from[],head[];
  12. bool inq[];
  13.  
  14. struct edge{int from,to,next,c,v;}e[];
  15.  
  16. void ins(int u,int v,int w,int c)
  17. {
  18. cnt++;
  19. e[cnt].from=u;e[cnt].to=v;
  20. e[cnt].next=head[u];head[u]=cnt;
  21. e[cnt].c=c;e[cnt].v=w;
  22. }
  23.  
  24. void insert(int u,int v,int w,int c)
  25. {ins(u,v,w,c);ins(v,u,,-c);}
  26.  
  27. bool spfa()
  28. {
  29. for(int i=;i<=T;i++)d[i]=inf;
  30. int t=,w=;d[]=;inq[]=;q[]=;
  31. while(t!=w)
  32. {
  33. int now=q[t];t++;if(t==T)t=;
  34. for(int i=head[now];i;i=e[i].next)
  35. if(e[i].v&&d[e[i].to]>d[now]+e[i].c)
  36. {
  37. d[e[i].to]=d[now]+e[i].c;from[e[i].to]=i;
  38. if(!inq[e[i].to])
  39. {inq[e[i].to]=;q[w++]=e[i].to;if(w==T)w=;}
  40. }
  41. inq[now]=;
  42. }
  43. if(d[T]==inf)return ;
  44. return ;
  45. }
  46.  
  47. void mcf()
  48. {
  49. int x=inf,a,b,y;
  50. for(int i=from[T];i;i=from[e[i].from])
  51. {
  52. x=min(x,e[i].v);
  53. if(e[i].from==)
  54. {y=e[i].to;a=(y-)/tot+;b=y%tot+;}
  55. }
  56. for(int i=from[T];i;i=from[e[i].from])
  57. {e[i].v-=x;e[i^].v+=x;ans+=e[i].c*x;}
  58. for(int i=;i<=m;i++)
  59. insert((a-)*tot+b,n*tot+i,,b*t[i][a]);
  60. }
  61.  
  62. int main()
  63. {
  64. scanf("%d%d",&m,&n);
  65. for(int i=;i<=m;i++)
  66. {
  67. scanf("%d",&c[i]);
  68. tot+=c[i];
  69. }
  70. for(int i=;i<=m;i++)
  71. for(int j=;j<=n;j++)
  72. scanf("%d",&t[i][j]);
  73. for(int i=;i<=n*tot;i++)
  74. insert(,i,,);
  75. for(int i=;i<=m;i++)
  76. insert(n*tot+i,T,c[i],);
  77. for(int i=;i<=n;i++)
  78. for(int k=;k<=m;k++)
  79. insert((i-)*tot+,n*tot+k,,t[k][i]);
  80. while(spfa())mcf();
  81. printf("%d",ans);
  82. return ;
  83. }

[bzoj2879][网络流,动态加边]美食节[Noi2012]的更多相关文章

  1. 【BZOJ2879】[Noi2012]美食节 动态加边网络流

    [BZOJ2879][Noi2012]美食节 Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食 ...

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

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

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

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

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

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

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

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

  6. P2050 [NOI2012]美食节 动态加边加点

    修车数据加强版 需要动态加边加点 #include<bits/stdc++.h> using namespace std; const int INF = 0x7f7f7f7f; , MA ...

  7. 【bzoj1189】[HNOI2007]紧急疏散evacuate BFS最短路+动态加边网络流

    题目描述 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是'.',那么表示这是一块空地:如果是'X',那么表示这是一面墙,如果是'D',那么表示这是一扇门,人们可以 ...

  8. BZOJ 2879 美食节(费用流-动态加边)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2879 题意:有n道菜,每道菜需要b[i]份,m个厨师,第j个厨师做第i道菜需要时间a[i ...

  9. bzoj2879(动态加边费用流)

    参考题解:http://blog.csdn.net/yxuanwkeith/article/details/52254602 //开始跑费用流用的dijkstra,一直错,后来发现动态加边后我不会处理 ...

随机推荐

  1. [Swift通天遁地]一、超级工具-(12)使用Toaster制作简短提示语的吐司窗口

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  2. Sql 主键设置

    1.开发数据库时常用命名规范 1>.使用不包含数字的单数表名,如果必要的话可以增加模块名前缀. 2>.对于主键的命名,使用表名+ID的形式. 3>.作为外键的列的名字应该与它们所对应 ...

  3. 键盘按钮keyCode大全:获取按键对应的键值的方法

    没有大全,只有方法,授人与鱼不如授人于渔: 下面这行代码,大家可以打在控制台里,直接进行测试: document.body.onkeyup = function (e) { e = e || wind ...

  4. spring cloud config搭建说明例子(三)-添加actuator

    添加心跳 服务端 ConfigServer pom.xml添加actuator包 <dependency> <groupId>org.springframework.cloud ...

  5. JAVA的双色球 小程序

    还是挺简单的,功能过于强大. import java.util.Arrays; import java.util.Random; import java.util.Scanner; public cl ...

  6. 字符类型C++(ascll码表)

    ascll码: 序号 字符 序号 字符 序号 字符 序号 字符 序号 字符 序号 字符 32 空格 48 0 64 @ 80 P 96 ` 112 p 33 ! 49 1 65 A 81 Q 97 a ...

  7. 洛谷 P3437 [POI2006]TET-Tetris 3D

    二维线段树区间更新啊 树套树的外层树,如果是线段树的话一般似乎不能打标记?(毕竟标记不好下传) 然而起码对于这题是可以的...对于外层线段树,每个节点放两个内层线段树dat和setv,分别是得到的值和 ...

  8. [ Luogu 3924 ] 康纳的线段树

    \(\\\) \(Description\) 现在有一个线段树维护长为\(N\)的数列,实现方式是\(mid=((l+r)>>1)\),支持区间加,节点维护区间和. 共有\(M\)次区间加 ...

  9. python--12、数据库进阶

    SQL语句关键词: #再次不做过多介绍 使用INSERT实现数据的插入 UPDATE实现数据的更新 使用DELETE实现数据的删除 使用SELECT查询数据以及. #示例中department为部门表 ...

  10. html5前端杂记

    首先是css的一些知识 毕竟自己懂得不多,但是一看资料.感觉似曾相识 <style> .red-text { color: red; } </style>//这里是css样式的 ...