题意:给定一张有向图,每条边都有一个容量C和一个扩容费用W。这里扩容费用是指将容量扩大1所需的费用。

求: 1、 在不扩容的情况下,1到N的最大流;

2、 将1到N的最大流增加K所需的最小扩容费用。

30%的数据中,N<=100
100%的数据中,N<=1000,M<=5000,K<=10

思路:RYZ作业

第一问最大流即可

第二问网上很多题解都是在第一问的残余网络上构图,但是根本不需要

考虑边(x,y,z,w)

有容量为z,费用为0的免费流量,有容量为INF,费用为w的扩容付费流量,连这两种边

又因为求的是最大流为ans1+k时的最小费用,所以需要建立一个新的源点,从n连一条容量为ans1+k,费用为0的边来限制流量

费用流经典模型之一(模板?)

  1. var head,vet,next,len1,len2,fan,x,y,z,w:array[..]of longint;
  2. pre:array[..,..]of longint;
  3. dis,gap,q:array[..]of longint;
  4. inq:array[..]of boolean;
  5. n,m,ans1,ans2,tot,i,src,source,s,k:longint;
  6.  
  7. procedure add(a,b,c,d:longint);
  8. begin
  9. inc(tot);
  10. next[tot]:=head[a];
  11. vet[tot]:=b;
  12. len1[tot]:=c;
  13. len2[tot]:=d;
  14. head[a]:=tot;
  15.  
  16. inc(tot);
  17. next[tot]:=head[b];
  18. vet[tot]:=a;
  19. len1[tot]:=;
  20. len2[tot]:=-d;
  21. head[b]:=tot;
  22. end;
  23.  
  24. function min(x,y:longint):longint;
  25. begin
  26. if x<y then exit(x);
  27. exit(y);
  28. end;
  29.  
  30. function dfs(u,aug:longint):longint;
  31. var e,v,val,t,flow:longint;
  32. begin
  33. if u=src then exit(aug);
  34. e:=head[u]; flow:=; val:=s-;
  35. while e<> do
  36. begin
  37. v:=vet[e];
  38. if len1[e]> then
  39. begin
  40. if dis[u]=dis[v]+ then
  41. begin
  42. t:=dfs(v,min(len1[e],aug-flow));
  43. len1[e]:=len1[e]-t;
  44. len1[fan[e]]:=len1[fan[e]]+t;
  45. flow:=flow+t;
  46. if dis[source]>=s then exit(flow);
  47. if aug=flow then break;
  48. end;
  49. val:=min(val,dis[v]);
  50. end;
  51. e:=next[e];
  52. end;
  53. if flow= then
  54. begin
  55. dec(gap[dis[u]]);
  56. if gap[dis[u]]= then dis[source]:=s;
  57. dis[u]:=val+;
  58. inc(gap[dis[u]]);
  59. end;
  60. exit(flow);
  61. end;
  62.  
  63. function maxflow:longint;
  64. var ans:longint;
  65. begin
  66. fillchar(gap,sizeof(gap),);
  67. fillchar(dis,sizeof(dis),);
  68. gap[]:=s; ans:=;
  69. while dis[source]<s do ans:=ans+dfs(source,maxlongint);
  70. exit(ans);
  71. end;
  72.  
  73. function spfa:boolean;
  74. var t,u,e,v,i,w:longint;
  75. begin
  76. for i:= to s do
  77. begin
  78. dis[i]:=maxlongint>>;
  79. inq[i]:=false;
  80. end;
  81. t:=; w:=; q[]:=source; inq[source]:=true; dis[source]:=;
  82. while t<w do
  83. begin
  84. inc(t); u:=q[t mod ];
  85. inq[u]:=false;
  86. e:=head[u];
  87. while e<> do
  88. begin
  89. v:=vet[e];
  90. if (len1[e]>)and(dis[u]+len2[e]<dis[v]) then
  91. begin
  92. pre[v,]:=u;
  93. pre[v,]:=e;
  94. dis[v]:=dis[u]+len2[e];
  95. if not inq[v] then
  96. begin
  97. inc(w); q[w mod ]:=v; inq[v]:=true;
  98. end;
  99. end;
  100. e:=next[e];
  101. end;
  102. end;
  103. if dis[src]=maxlongint>> then exit(false);
  104. exit(true);
  105. end;
  106.  
  107. procedure mcf;
  108. var k,e,t:longint;
  109. begin
  110. k:=src; t:=maxlongint;
  111. while k<>source do
  112. begin
  113. t:=min(t,len1[pre[k,]]);
  114. k:=pre[k,];
  115. end;
  116. k:=src;
  117. while k<>source do
  118. begin
  119. e:=pre[k,];
  120. len1[e]:=len1[e]-t;
  121. len1[fan[e]]:=len1[fan[e]]+t;
  122. ans2:=ans2+t*len2[e];
  123. k:=pre[k,];
  124. end;
  125. end;
  126.  
  127. begin
  128. assign(input,'bzoj1834.in'); reset(input);
  129. assign(output,'bzoj1834.out'); rewrite(output);
  130. readln(n,m,k);
  131. for i:= to do
  132. if i and = then fan[i]:=i+
  133. else fan[i]:=i-;
  134. for i:= to m do
  135. begin
  136. readln(x[i],y[i],z[i],w[i]);
  137. add(x[i],y[i],z[i],w[i]);
  138. end;
  139.  
  140. source:=; src:=n; s:=n;
  141. ans1:=maxflow;
  142. fillchar(head,sizeof(head),);
  143. tot:=;
  144. for i:= to m do
  145. begin
  146. add(x[i],y[i],z[i],);
  147. add(x[i],y[i],maxlongint,w[i]);
  148. end;
  149. write(ans1,' ');
  150. inc(src); inc(s);
  151. add(n,src,ans1+k,);
  152. while spfa do mcf;
  153. write(ans2);
  154. close(input);
  155. close(output);
  156. end.

【BZOJ1834】network 网络扩容(最大流,费用流)的更多相关文章

  1. BZOJ 1834: [ZJOI2010]network 网络扩容(网络流+费用流)

    一看就知道是模板题= = ,不说什么了= = PS:回去搞期末了,暑假再来刷题了 CODE: #include<cstdio> #include<iostream> #incl ...

  2. BZOJ1834 [ZJOI2010]network 网络扩容(最小费用最大流)

    挺直白的构图..最小费用最大流的定义. #include<cstdio> #include<cstring> #include<queue> #include< ...

  3. BZOJ 1834: [ZJOI2010]network 网络扩容 最小费用流_最大流_残量网络

    对于第一问,跑一遍最大流即可. 对于第二问,在残量网络上的两点间建立边 <u,v>,容量为无限大,费用为扩充费用. 跑一遍最小费用流即可. Code: #include <vecto ...

  4. BZOJ 1834 ZJOI2010 network 网络扩展 Dinic+EK费用流

    标题效果:给定一个n积分m无向图边,每一方有一个扩展的成本c.代表扩张1费用的交通,寻求最大流量和扩大的最大流量k最小成本 第一问直接运行的最大流量 第二个问题将是连接到一个流的末端每个边缘的起点是正 ...

  5. 洛谷P2604 网络扩容 拆点+费用流

    原题链接 这题貌似比较水吧,最简单的拆点,直接上代码了. #include <bits/stdc++.h> using namespace std; #define N 1000 #def ...

  6. bzoj-1834 network 网络扩容 【网络流】

    这题就是复习下网络流. #include <bits/stdc++.h> #define rep(i, a, b) for (int i = a; i <= b; i++) #def ...

  7. BZOJ1834 [ZJOI2010]network 网络扩容 【最大流,费用流】

    1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 3394  Solved: 1774 [Subm ...

  8. [BZOJ1834][ZJOI2010]network 网络扩容 最大流+费用流

    1834: [ZJOI2010]network 网络扩容 Time Limit: 3 Sec  Memory Limit: 64 MB Submit: 3330  Solved: 1739 [Subm ...

  9. 【最大流】【费用流】bzoj1834 [ZJOI2010]network 网络扩容

    引用题解: 最大流+费用流. 第一问最大流即可. 第二问为“最小费用最大流”. 由题意,这一问的可转化为在上一问的“残量网络”上,扩大一些边的容量,使能从新的图中的最大流为k. 那么易得:对于还有剩余 ...

  10. 【BZOJ1834】[ZJOI2010]network 网络扩容 最大流+最小费用流

    [BZOJ1834][ZJOI2010]network 网络扩容 Description 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用.求: 1. 在不 ...

随机推荐

  1. CF778A(round 402 div.2 D) String Game

    题意: Little Nastya has a hobby, she likes to remove some letters from word, to obtain another word. B ...

  2. P2142 高精度减法

    题目描述 高精度减法 输入输出格式 输入格式: 两个整数a,b(第二个可能比第一个大) 输出格式: 结果(是负数要输出负号) 输入输出样例 输入样例#1: 2 1 输出样例#1: 1 说明 20%数据 ...

  3. js事件、Js中的for循环和事件的关系、this

    一.js事件  1.事件 用户在网页中所触发的行为 鼠标滑动种类很多,键盘.表单特列: 点击:onclick 鼠标进入:onmouseenter 鼠标离开:onmouseleave 鼠标悬浮:onmo ...

  4. Can't locate ExtUtils/MakeMaker.pm in @INC

    Can't locate ExtUtils/MakeMaker.pm in @INC 解决办法:yum install perl-devel

  5. Dreamoon and MRT(二元枚举)

    题目 数轴上有M个点a1.a2....am,另有一个数列p1.p2....pn,(1 ≤ pii ≤ M). 给定d1.d2....dn,对所有的 i (1 ≤ i ≤ n),已知 |api+1 - ...

  6. axure使用经验

    泛化不常用======伸展也是拉动原件收缩也是拉动原件====== 动态模板相互影响(有的时候会出现这个问题,只需要设置两者的高度,不让两者有包含关系(一点点可以有):====== 实现高级菜单栏(同 ...

  7. flask_第一个程序

    安装flask sudo pip3 install flask falsk最小应用 from flask import Flask app = Flask(__name__) @app.route(' ...

  8. CSS中列表项list样式

    CSS列表属性 属性 描述 list-style-属性 用于把所有用于列表的属性设置于一个声明中. list-style-image 将图象设置为列表项标志. list-style-position ...

  9. bzoj3336 Uva10572 Black and White

    题目描述: 数据范围:2<=n,m<=8 题解: 很明显需要状压.但是怎么压不知道,压什么不知道. 然后从条件下手. 条件1要求黑色在一起白色在一起,记录轮廓线很容易做到. 条件2要求不能 ...

  10. turtle安装问题

    原文来源:https://blog.csdn.net/liudongdong19/article/details/81283942 本人python版本为:Python 3.6.5 在安装turtle ...