建图:从源点向第一层连边,第一层表示当天用掉多少餐巾,第二层表示当天需要多少餐巾,所以注意购买餐巾的边容量为无穷大,要从源点开始连向第二层的点,每天可能有剩余,在第一层内表示为流入第二天的节点。具体见代码,第一次写费用流,不知道模板对不对。。。

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <cmath>
  6. #include <ctime>
  7. #include <cstdlib>
  8. #include <queue>
  9.  
  10. using namespace std;
  11.  
  12. template<const int _n,const int _m>
  13. struct Edge
  14. {
  15. struct Edge_base { int to,next,w,c; }e[_m];
  16. int cnt,p[_n];
  17. Edge() { clear(); }
  18. int start(const int x) { return p[x]; }
  19. void insert(const int x,const int y,const int z,const int zz)
  20. { e[++cnt].to=y; e[cnt].next=p[x]; e[cnt].w=z; e[cnt].c=zz; p[x]=cnt; return ; }
  21. void clear() { cnt=,memset(p,,sizeof(p)); }
  22. Edge_base& operator[](const int x) { return e[x]; }
  23. };
  24.  
  25. int n,Dis[],SSS,TTT,cur[],a[];
  26. int Cost,Flow;
  27. bool visited[];
  28. Edge<,> e;
  29.  
  30. bool Spfa(const int S)
  31. {
  32. int i,t,temp;
  33. queue<int> Q;
  34. memset(Dis,0x3f,sizeof(Dis));
  35. Dis[S]=;
  36. visited[S]=true;
  37. Q.push(S);
  38. while(!Q.empty())
  39. {
  40. t=Q.front(),Q.pop();visited[t]=false;
  41. for(i=e.start(t);i;i=e[i].next)
  42. {
  43. temp=e[i].to;
  44. if(e[i].w && Dis[t]+e[i].c<Dis[temp])
  45. {
  46. Dis[temp]=Dis[t]+e[i].c;
  47. if(!visited[temp])
  48. {
  49. visited[temp]=true;
  50. Q.push(temp);
  51. }
  52. }
  53. }
  54. }
  55. return Dis[TTT]!=0x3f3f3f3f;
  56. }
  57.  
  58. int Dfs(const int S,const int bk)
  59. {
  60. if(S==TTT)return bk;
  61. visited[S]=true;
  62. int rest=bk;
  63. for(int &i=cur[S];i;i=e[i].next)
  64. {
  65. if(!visited[e[i].to] && Dis[S]+e[i].c==Dis[e[i].to] && e[i].w)
  66. {
  67. int flow=Dfs(e[i].to,min(rest,e[i].w));
  68. Cost+=flow*e[i].c;
  69. e[i].w-=flow;
  70. e[i^].w+=flow;
  71. if((rest-=flow)<=)break;
  72. }
  73. }
  74. if(bk==rest)Dis[S]=0x3f3f3f3f;
  75. visited[S]=false;
  76. return bk-rest;
  77. }
  78.  
  79. pair<int,int> Dinic()
  80. {
  81. while(Spfa(SSS))
  82. {
  83. memcpy(cur,e.p,sizeof(cur));
  84. Flow+=Dfs(SSS,0x3f3f3f3f);
  85. }
  86. return make_pair(Flow,Cost);
  87. }
  88.  
  89. int main()
  90. {
  91. freopen("napkin.in","r",stdin);
  92. freopen("napkin.out","w",stdout);
  93. int i,newn,ts,cs,tf,cf;
  94.  
  95. scanf("%d",&n);
  96. for(i=;i<=n;++i)scanf("%d",&a[i]);
  97. scanf("%d%d%d%d%d",&newn,&ts,&cs,&tf,&cf);
  98.  
  99. SSS=n+n+;TTT=SSS+;
  100. for(i=;i<=n;++i)
  101. {
  102. e.insert(SSS,i,a[i],),e.insert(i,SSS,,);
  103. e.insert(i+n,TTT,a[i],),e.insert(TTT,i+n,,);
  104. e.insert(SSS,i+n,0x3f3f3f3f,newn),e.insert(i+n,SSS,,-newn);
  105. if(i!=n)e.insert(i,i+,0x3f3f3f3f,),e.insert(i+,i,,);
  106. if(i+tf<=n)e.insert(i,i+tf+n,0x3f3f3f3f,cf),e.insert(i+tf+n,i,,-cf);
  107. if(i+ts<=n)e.insert(i,i+ts+n,0x3f3f3f3f,cs),e.insert(i+ts+n,i,,-cs);
  108. }
  109.  
  110. printf("%d\n",Dinic().second);
  111.  
  112. return ;
  113. }

[cogs461] [网络流24题#10] 餐巾 [网络流,最小费用最大流]的更多相关文章

  1. LibreOJ #6008. 「网络流 24 题」餐巾计划 最小费用最大流 建图

    #6008. 「网络流 24 题」餐巾计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  2. LibreOJ #6013. 「网络流 24 题」负载平衡 最小费用最大流 供应平衡问题

    #6013. 「网络流 24 题」负载平衡 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  3. COGS738 [网络流24题] 数字梯形(最小费用最大流)

    题目这么说: 给定一个由n 行数字组成的数字梯形如下图所示.梯形的第一行有m 个数字.从梯形的顶部的m 个数字开始,在每个数字处可以沿左下或右下方向移动,形成一条从梯形的顶至底的路径.规则1:从梯形的 ...

  4. Bashu2445 -- 【网络流24题-10】餐巾问题

    2445 -- [网络流24题-10]餐巾问题 Description 一个餐厅在相继的n天里,每天需要用的餐巾数不尽相同.假设第i天需要ri块餐巾(i=1,2,…,n).餐厅可以购买新的餐巾,每块餐 ...

  5. Libre 6008 「网络流 24 题」餐巾计划 (网络流,最小费用最大流)

    Libre 6008 「网络流 24 题」餐巾计划 (网络流,最小费用最大流) Description 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,-,N).餐厅可以从三种途径获得餐巾. ...

  6. LOJ #6008. 「网络流 24 题」餐巾计划

    #6008. 「网络流 24 题」餐巾计划 题目描述 一个餐厅在相继的 n nn 天里,每天需用的餐巾数不尽相同.假设第 i ii 天需要 ri r_ir​i​​ 块餐巾.餐厅可以购买新的餐巾,每块餐 ...

  7. [luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划

    [luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划 试题描述 一个餐厅在相继的 \(N\) 天里,第 \(i\) 天需要 \(R_i\) 块餐巾 \((i=l,2,-,N)\) ...

  8. CGOS461 [网络流24题] 餐巾(最小费用最大流)

    题目这么说的: 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,…,N).餐厅可以从三种途径获得餐巾. 购买新的餐巾,每块需p分: 把用过的餐巾送到快洗部,洗一块需m天,费用需f分(f< ...

  9. BZOJ_1221_ [HNOI2001]_软件开发(最小费用流,网络流24题#10)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1221 n天,每天需要r个毛巾,用完以后可以洗,要么花fa洗a天,要么花fb洗b天,毛巾不够了可 ...

随机推荐

  1. istio-禁用/允许sidecar设置

    一.在namespace设置自动注入: 给 default 命名空间设置标签:istio-injection=enabled: $ kubectl label namespace default is ...

  2. Django-CKeditor使用笔记

    1. 安装django-ckeditor $ pip install django-ckeditor 2. 在setting中,添加ckeditor , ckeditor_uploader 到INST ...

  3. 【WIP】Bootstrap nav

    创建: 2017/09/28   更新: 2017/10/14 标题加上[WIP]

  4. U3D版本控制设置 Force Text优劣

    git的忽略列表 .gitignore Library/ Temp/ .vs/ *.csproj *.sln Edit > Project Settings > Editor 下把meta ...

  5. 洛谷P1731生日蛋糕(dfs+剪枝)

    P1731 生日蛋糕 题目背景 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层 生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1<=i<=M)层蛋糕是半径为R ...

  6. bzoj1036 树的统计(树链剖分+线段树)

    1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 15120  Solved: 6141[Submit ...

  7. Win7 + VS2015 + Python3.6编译

    0. 下载安装hg. http://bitbucket.org/tortoisehg/files/downloads/tortoisehg-4.0.1-x64.msi 1. 下载Python3.6源代 ...

  8. [转]Oracle11g链接提示未“在本地计算机注册“OraOLEDB.Oracle”解决方法

    本文转自:http://www.cnblogs.com/tomfang/archive/2013/05/25/3098454.html 当 用,Provider=OraOLEDB.Oracle方式访问 ...

  9. Listview模板

    每次写listview都要翻以前的代码,好烦.所以记下模板,方便下次的使用. xml文件部分代码: <ListView android:id="@+id/listview" ...

  10. [Windows Server 2008] Serv-U安全设置

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:Serv- ...