题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6118

题意:中文题

分析:

最小费用最大流,首先建立源点 s ,与超级汇点 t 。因为生产一个商品需要花费 a[i] 元,且上限为 b[i] ,所以我们从 s 向这些点之间连一条容量为 b[i] ,费用为 a[i] 的边。同样的道理,出售一个商品可以赚到 c[i] 元,最多出售 d[i] 个,于是我们从这些点向 t 连一条容量为 d[i] ,费用为 -c[i] 的边。最后所有的公路也是花费,从 uv 连接一条双向边,容量为 INF ,费用为 k,然而要注意这道题并不是要求最大流,这道题要求的是可行流,这个只需要修改一下求增广的过程就可以了,最后答案就是费用流的相反数。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int inf = 0x3FFFFFFF;
  4. const int maxn = 2222;
  5. struct node{
  6. int st, en, flow, cost, next;
  7. node(){}
  8. node(int st, int en, int flow, int cost, int next):st(st),en(en),flow(flow),cost(cost),next(next){}
  9. }E[101000];
  10.  
  11. int num, p[maxn];
  12. void init(){
  13. memset(p, -1, sizeof(p));
  14. num = 0;
  15. }
  16. void add(int st, int en, int flow, int cost){
  17. E[num] = node(st, en, flow, cost, p[st]);
  18. p[st] = num++;
  19. E[num] = node(en, st, 0, -cost, p[en]);
  20. p[en] = num++;
  21. }
  22. int pre[maxn];
  23. int dis[maxn];
  24. bool fg[maxn];
  25. bool spfa(int st, int en)
  26. {
  27. for(int i=0;i<=en;i++){
  28. fg[i] = 0, dis[i] = inf, pre[i]=-1;
  29. }
  30. queue<int>q;
  31. q.push(st);
  32. fg[st]=1;
  33. dis[st]=0;
  34. while(!q.empty()){
  35. int u = q.front(); q.pop();
  36. fg[u]=0;
  37. for(int i=p[u];~i;i=E[i].next){
  38. int v = E[i].en;
  39. if(E[i].flow&&dis[v]>dis[u]+E[i].cost){
  40. dis[v] = dis[u]+E[i].cost;
  41. pre[v]=i;
  42. if(!fg[v]){
  43. fg[v]=1;
  44. q.push(v);
  45. }
  46. }
  47. }
  48. }
  49. // if(dis[en] < inf) return 1;
  50. // return 0;
  51. return dis[en]<=0;
  52. }
  53.  
  54. int solve(int st, int en){
  55. int ans=0;
  56. while(spfa(st,en)){
  57. int d = inf;
  58. for(int i=pre[en];i+1;i=pre[E[i].st]) d = min(d, E[i].flow);
  59. for(int i=pre[en];i+1;i=pre[E[i].st]){
  60. E[i].flow -= d;
  61. E[i^1].flow += d;
  62. ans += d*E[i].cost;
  63. }
  64. }
  65. return ans;
  66. }
  67. int main()
  68. {
  69. int n,m;
  70. while (cin>>n>>m)
  71. {
  72. init();
  73. int s=0,t=n+1,cost;
  74. for (int i=1; i<=n; i++)
  75. {
  76. int a,b,c,d;
  77. cin>>a>>b>>c>>d;
  78. add(s,i,b,a);
  79. add(i,t,d,-c);
  80. }
  81. while (m--)
  82. {
  83. int u,v,k;
  84. cin>>u>>v>>k;
  85. add(u,v,inf,k);
  86. add(v,u,inf,k);
  87. }
  88. int ans = -solve(s,t);
  89. printf("%d\n", ans);
  90. }
  91. return 0;
  92. }

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

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

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

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

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

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

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

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

    度度熊的交易计划 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. 2017"百度之星"程序设计大赛 - 初赛(B) 度度熊的交易计划 最小费用最大流求最大费用

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

  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. Java线程常用方法详解

    线程的常用方法 1.start() : 线程调用该方法将启动线程,使之从新建状态进入就绪队列排队,一旦轮到它来享用CPU资源时,就可以脱离创建它的线程独立开始自己的生命周期了. 2.run(): Th ...

  2. vue-cli开发时,ajax跨域详细解决办法

    在config/index.js中进行如下配置 [即在进行ajax请求时,地址中任何以/api开头的请求地址都被解析为目标地址,target就是你想要的后台接口地址] proxyTable: { '/ ...

  3. 2016 China Final E - Bet

    /************************************************************************* > File Name: E.cpp > ...

  4. [洛谷P3833][SHOI2012]魔法树

    题目大意:给一棵树,路径加,子树求和 题解:树剖 卡点:无 C++ Code: #include <cstdio> #include <iostream> #define ma ...

  5. UVA.10305 Maximum Product (暴力)

    UVA.10305 Maximum Product (暴力) 题意分析 直接枚举起点和重点,然后算出来存到数组里面,sort然后取最大值即可. 代码总览 #include <iostream&g ...

  6. 项目管理---git----快速使用git笔记(一)------git的简单介绍

    最近svn代码管理服务器崩溃了,切换到git来运作. 经过几天的使用,感觉很不错. 尤其是代码合并到正式版本之前 可以对代码进行 code review. 这样能很好的保证团队的代码质量和一些重复代码 ...

  7. bzoj3302&bzoj2447&bzoj2103(树的重心)

    三倍的幸福! 暴力的做法就是枚举每一条边断开,选的两个点就是左右两棵树的重心. 可以发现找重心的时候一定是往权和大的子树找的,需要维护一个点的最大和次大子树,因为最大子树可能被割掉了,实际效率为O(N ...

  8. mybatis Mapper 中resultType使用方法及返回值为Map的写法

    mybatis学习(七)——resultType解析 resultType是sql映射文件中定义返回值类型,返回值有基本类型,对象类型,List类型,Map类型等.现总结一下再解释 总结: resul ...

  9. Linux环境下用Weblogic发布项目【二】 -- 配置Domain域

    配置注意事项: 修改密码时密码长度最少8位:在"<下一步>"后面为空即表示敲回车: 具体配置步骤如下: [root@GPS-App ~]# [root@GPS-App ...

  10. eclipse的最新版本luna的中建立svn和maven

    http://blog.csdn.net/notillusion/article/details/40950185