Problem Description
度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题:

喵哈哈村以及周围的村庄可以看做是一共由n个片区,m条公路组成的地区。

由于生产能力的区别,第i个片区能够花费a[i]元生产1个商品,但是最多生产b[i]个。

同样的,由于每个片区的购买能力的区别,第i个片区也能够以c[i]的价格出售最多d[i]个物品。

由于这些因素,度度熊觉得只有合理的调动物品,才能获得最大的利益。

据测算,每一个商品运输1公里,将会花费1元。

那么喵哈哈村最多能够实现多少盈利呢?

Input
本题包含若干组测试数据。
每组测试数据包含:
第一行两个整数n,m表示喵哈哈村由n个片区、m条街道。
接下来n行,每行四个整数a[i],b[i],c[i],d[i]表示的第i个地区,能够以a[i]的价格生产,最多生产b[i]个,以c[i]的价格出售,最多出售d[i]个。
接下来m行,每行三个整数,u[i],v[i],k[i],表示该条公路连接u[i],v[i]两个片区,距离为k[i]

可能存在重边,也可能存在自环。

满足:
1<=n<=500,
1<=m<=1000,
1<=a[i],b[i],c[i],d[i],k[i]<=1000,
1<=u[i],v[i]<=n

Output
输出最多能赚多少钱。

Sample Input
2 1
5 5 6 1
3 5 7 7
1 2 1

Sample Output
23

题意

如上

题解

超级源点S=0,超级汇点T=n+1

对于每个a,b,c,d

建图从源点到i建边,流量为b花费为a,从i到汇点建边,流量为d花费为-c

最后每个u,v建边,流量INF,花费dis

跑一个S到T的最小费用最大流,由于每个花费都取反了,所以跑出来的值就是最大费用最大流

这里有个坑点是如果源点到汇点的距离DIST[T]>0说明以后的增广路都是亏钱,就可以直接跳出循环

代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N=1e5+;
  5. const int M=2e5+;
  6. const int INF=0x3f3f3f3f;
  7.  
  8. int FIR[N],FROM[M],TO[M],CAP[M],FLOW[M],COST[M],NEXT[M],tote;
  9. int pre[N],dist[N],q[];
  10. bool vis[N];
  11. int n,m,S,T;
  12. void init()
  13. {
  14. tote=;
  15. memset(FIR,-,sizeof(FIR));
  16. }
  17. void addEdge(int u,int v,int cap,int cost)
  18. {
  19. FROM[tote]=u;
  20. TO[tote]=v;
  21. CAP[tote]=cap;
  22. FLOW[tote]=;
  23. COST[tote]=cost;
  24. NEXT[tote]=FIR[u];
  25. FIR[u]=tote++;
  26.  
  27. FROM[tote]=v;
  28. TO[tote]=u;
  29. CAP[tote]=;
  30. FLOW[tote]=;
  31. COST[tote]=-cost;
  32. NEXT[tote]=FIR[v];
  33. FIR[v]=tote++;
  34. }
  35. bool SPFA(int s, int t)
  36. {
  37. memset(dist,INF,sizeof(dist));
  38. memset(vis,false,sizeof(vis));
  39. memset(pre,-,sizeof(pre));
  40. dist[s] = ;vis[s]=true;q[]=s;
  41. int head=,tail=;
  42. while(head!=tail)
  43. {
  44. int u=q[++head];vis[u]=false;
  45. for(int v=FIR[u];v!=-;v=NEXT[v])
  46. {
  47. if(dist[TO[v]]>dist[u]+COST[v]&&CAP[v]>FLOW[v])
  48. {
  49. dist[TO[v]]=dist[u]+COST[v];
  50. pre[TO[v]]=v;
  51. if(!vis[TO[v]])
  52. {
  53. vis[TO[v]] = true;
  54. q[++tail]=TO[v];
  55. }
  56. }
  57. }
  58. }
  59. if(dist[t]>)return false;//亏钱
  60. return pre[t]!=-;
  61. }
  62. void MCMF(int s, int t, int &cost, int &flow)
  63. {
  64. flow=;
  65. cost=;
  66. while(SPFA(s,t))
  67. {
  68. int Min = INF;
  69. for(int v=pre[t];v!=-;v=pre[TO[v^]])
  70. Min = min(Min, CAP[v]-FLOW[v]);
  71. for(int v=pre[t];v!=-;v=pre[TO[v^]])
  72. {
  73. FLOW[v]+=Min;
  74. FLOW[v^]-=Min;
  75. cost+=COST[v]*Min;
  76. }
  77. flow+=Min;
  78. }
  79. }
  80. int main()
  81. {
  82. while(scanf("%d%d",&n,&m)!= EOF)
  83. {
  84. init();
  85. S=,T=n+;
  86. int u,v,a,b,c,d;
  87. for(int i=;i<=n;i++)
  88. {
  89. scanf("%d%d%d%d",&a,&b,&c,&d);
  90. addEdge(S,i,b,a);
  91. addEdge(i,T,d,-c);
  92. }
  93. for(int i=;i<=m;i++)
  94. {
  95. scanf("%d%d%d",&u,&v,&d);
  96. addEdge(u,v,0x3f3f3f3f,d);
  97. addEdge(v,u,0x3f3f3f3f,d);
  98. }
  99. int cost,flow;
  100. MCMF(S,T,cost,flow);
  101. printf("%d\n",-cost);
  102. }
  103. return ;
  104. }

HDU 6118 度度熊的交易计划(最小费用最大流)的更多相关文章

  1. HDU 6118 度度熊的交易计划 最大费用可行流

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6118 题意:中文题 分析: 最小费用最大流,首先建立源点 s ,与超级汇点 t .因为生产一个商品需要 ...

  2. 2017"百度之星"程序设计大赛 - 初赛(B) 度度熊的交易计划 最小费用最大流求最大费用

    /** 题目:度度熊的交易计划 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6118 题意:度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题 ...

  3. HDU 6118 度度熊的交易计划(费用流)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6118 [题目大意] 给出一张无向边权图,每个点最多可以生产b[i]商品,每件代价为a[i], 每个 ...

  4. HDU 6118 度度熊的交易计划 【最小费用最大流】 (2017"百度之星"程序设计大赛 - 初赛(B))

    度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  5. hdu 6118度度熊的交易计划(费用流)

    度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  6. hdu 6118 度度熊的交易计划

    度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  7. HDU 6118 度度熊的交易计划 (最小费用流)

    度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  8. HDU 6118 度度熊的交易计划(网络流-最小费用最大流)

    度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题: 喵哈哈村以及周围的村庄可以看做是一共由n个片区,m条公路组成的地区. 由于生产能力的区别,第i个片区能够花费a[i]元生产1个商品,但 ...

  9. HDU 6118 2017百度之星初赛B 度度熊的交易计划(费用流)

    度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

随机推荐

  1. 机器学习进阶-图像基本操作-图像数据读取 1.cv2.imread(图片读入) 2.cv2.imshow(图片展示) 3.cv2.waitKey(图片停留的时间) 4.cv2.destroyAllWindows(清除所有的方框界面) 5.cv2.imwrite(对图片进行保存)

    1. cv2.imread('cat.jpg', cv2.IMGREAD_GRAYSCALE)  # 使用imread读入图像(BGR顺序), 使用IMGREAD_GRAYSCALE 使得读入的图片为 ...

  2. day28-面相对象的特殊成员、内置函数

    1. isinstance与issubclass 1.1.isinstance(obj,cls) 检查obj是否是类cls的对象,或者是类cls的子类的对象 class A: pass class B ...

  3. unity "[ ]"标签

    [CanEditMultipleObjects]//可多对象编辑 public class Collider2DEditor:Editor {} [SerializeField]//序列化私有属性 p ...

  4. map转换成JSON的3种方法

    http://www.json.cn/JSON格式校验 1 json-lib <dependency> <groupId>net.sf.json-lib</groupId ...

  5. How to Pronounce the Word ARE

    How to Pronounce the Word ARE Share Tweet Share Tagged With: ARE Reduction Study the ARE reduction. ...

  6. RabbitMQ系列教程之七:RabbitMQ的 C# 客户端 API 的简介(转载)

    RabbitMQ系列教程之七:RabbitMQ的 C# 客户端 API 的简介 今天这篇博文是我翻译的RabbitMQ的最后一篇文章了,介绍一下RabbitMQ的C#开发的接口.好了,言归正传吧. N ...

  7. tap news:week5 0.0 create react app

    参考https://blog.csdn.net/qtfying/article/details/78665664 先创建文件夹 安装create react app 这个脚手架(facebook官方提 ...

  8. js(鼠标键盘拖动事件)

    拖动事件是h5(HTML5的) 1:draggable(true) 2:拖动源 ondragstart ,ondragend 3:目的地 ondraglenter,ondragover,ondragl ...

  9. Javascript中call、apply之我见

    一.call和apply定义. 1.Call 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 参数 thisObj 可选项.将被用作当前对象的对象. arg ...

  10. Unity3d资源管理分析

    原创链接:http://blog.csdn.net/ox_thedarkness/article/details/9197453 分离资源管理 参考 1.Unity3D占用内存太大的解决方法 - 星尘 ...