1. /**
  2. 题目:Acme Corporation UVA - 11613 拆点法+最大费用最大流(费用取相反数)+费用有正负
  3. 链接:https://vjudge.net/problem/UVA-11613
  4. 题意:m个月生产销售商品,求获得的最大利润。具体细节。
  5. 第i个月生产一件商品费用为mi,可以最多生产ni件,卖出一件商品价格为pi,最多卖出si件, 该月生产的商品
  6. 最多可以可以存放ei个月,即:i+1<= x <= i+ei 就是可以保存的时间,在该时间内可以拿出来卖。
  7. 每件商品储存一个月的费用为I。如果m个月之后,还有商品没卖出,那么那些商品舍弃,不产生利润。
  8. 思路:拆点法+最大费用最大流(费用取相反数)+费用有正负
  9.  
  10. 由于求最大利润, 所以生产费用和售价都取相反数
  11. 月份i拆成i,i'。 s->i,cap = ni, cost = mi。 i'->t, cap=si, cost = -pi。 i->i', cap = INF, cost = 0;
  12.  
  13. 如果月份x,y。 x+ex<=y。那么x->y', cap = INF, cost = I*(y-x)。 即:x月份生产的商品可以留到y月份来卖。
  14.  
  15. 由于取了相反数,所以得到的解越小,那么我们得到的利润越大。所以当增广路上的费用和>=0时候,舍去该增广路。
  16. */
  17. #include<iostream>
  18. #include<cstring>
  19. #include<vector>
  20. #include<map>
  21. #include<cstdio>
  22. #include<algorithm>
  23. #include<queue>
  24. using namespace std;
  25. const int INF = 0x3f3f3f3f;
  26. typedef long long LL;
  27. const int N = ;
  28. struct Edge{
  29. int from, to, cap, flow, cost;
  30. Edge(int u,int v,int c,int f,int w):from(u),to(v),cap(c),flow(f),cost(w){}
  31. };
  32. struct MCMF{
  33. int n, m;
  34. vector<Edge> edges;
  35. vector<int> G[N];
  36. int inq[N];
  37. int d[N];
  38. int p[N];
  39. int a[N];
  40.  
  41. void init(int n){
  42. this->n = n;
  43. for(int i = ; i <= n; i++) G[i].clear();
  44. edges.clear();
  45. }
  46.  
  47. void AddEdge(int from,int to,int cap,long long cost){
  48. edges.push_back(Edge(from,to,cap,,cost));
  49. edges.push_back(Edge(to,from,,,-cost));
  50. m = edges.size();
  51. G[from].push_back(m-);
  52. G[to].push_back(m-);
  53. }
  54.  
  55. bool BellmanFord(int s,int t,int &flow,long long &cost){
  56. for(int i = ; i <= n; i++) d[i] = INF;
  57. memset(inq, , sizeof inq);
  58. d[s] = ; inq[s] = ; p[s] = ; a[s] = INF;
  59.  
  60. queue<int> Q;
  61. Q.push(s);
  62. while(!Q.empty()){
  63. int u = Q.front(); Q.pop();
  64. inq[u] = ;
  65. for(int i = ; i < G[u].size(); i++){
  66. Edge& e = edges[G[u][i]];
  67. if(e.cap>e.flow&&d[e.to]>d[u]+e.cost){
  68. d[e.to] = d[u]+e.cost;
  69. p[e.to] = G[u][i];
  70. a[e.to] = min(a[u],e.cap-e.flow);
  71. if(!inq[e.to]) {Q.push(e.to); inq[e.to] = ;}
  72. }
  73. }
  74. }
  75. if(d[t]==INF) return false;
  76. if(d[t]>=){///当增广路上的费用和>=0时候,舍去该增广路。
  77. return false;
  78. }
  79. flow += a[t];
  80. cost += (long long)d[t]*(long long)a[t];
  81. for(int u = t; u!=s; u = edges[p[u]].from){
  82. edges[p[u]].flow+=a[t];
  83. edges[p[u]^].flow-=a[t];
  84. }
  85. return true;
  86. }
  87. int MincostMaxflow(int s,int t,long long &cost){
  88. int flow = ;
  89. cost = ;
  90. while(BellmanFord(s,t,flow,cost));
  91. return flow;
  92. }
  93. };
  94. int main()
  95. {
  96. int T, m, I, cas=;
  97. cin>>T;
  98. while(T--)
  99. {
  100. scanf("%d%d",&m,&I);
  101. int s = , t = *m+;
  102. MCMF mcmf;
  103. mcmf.init(t);
  104. int mi, ni, pi, si, ei;
  105. for(int i = ; i <= m; i++){
  106. scanf("%d%d%d%d%d",&mi,&ni,&pi,&si,&ei);
  107. mcmf.AddEdge(s,i,ni,mi);
  108. mcmf.AddEdge(i+m,t,si,-pi);
  109. mcmf.AddEdge(i,i+m,INF,);
  110. for(int j = ; j <= ei&&i+j<=m; j++){
  111. mcmf.AddEdge(i,i+j+m,INF,I*j);
  112. }
  113. }
  114. long long cost;
  115. int flow = mcmf.MincostMaxflow(s,t,cost);
  116. printf("Case %d: %lld\n",cas++,-cost);
  117. }
  118. return ;
  119. }

Acme Corporation UVA - 11613 拆点法+最大费用最大流(费用取相反数)+费用有正负的更多相关文章

  1. Acme Corporation UVA - 11613 费用流

    Code: #include<cstdio> #include<cstring> #include<vector> #include<queue> #i ...

  2. UVa 1658 (拆点法 最小费用流) Admiral

    题意: 给出一个有向带权图,求从起点到终点的两条不相交路径使得权值和最小. 分析: 第一次听到“拆点法”这个名词. 把除起点和终点以外的点拆成两个点i和i',然后在这两点之间连一条容量为1,费用为0的 ...

  3. Risk UVA - 12264 拆点法+最大流+二分 最少流量的节点流量尽量多。

    /** 题目:Risk UVA - 12264 链接:https://vjudge.net/problem/UVA-12264 题意:给n个点的无权无向图(n<=100),每个点有一个非负数ai ...

  4. UVA-11613 Acme Corporation (最大费用最大流+拆点)

    题目大意:有一种商品X,其每每单位存放一个月的代价I固定.并且已知其每月的最大生产量.生产每单位的的代价.最大销售量和销售单价,还已知每个月生产的X能最多能存放的时间(以月为单位).问只考虑前m个月, ...

  5. 【BZOJ-2893】征服王 最大费用最大流(带下界最小流)

    2893: 征服王 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 156  Solved: 48[Submit][Status][Discuss] D ...

  6. hdu 4411 2012杭州赛区网络赛 最小费用最大流 ***

    题意: 有 n+1 个城市编号 0..n,有 m 条无向边,在 0 城市有个警察总部,最多可以派出 k 个逮捕队伍,在1..n 每个城市有一个犯罪团伙,          每个逮捕队伍在每个城市可以选 ...

  7. 【BZOJ】1221: [HNOI2001] 软件开发(最小费用最大流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1221 先吐槽一下,数组依旧开小了RE:在spfa中用了memset和<queue>的版本 ...

  8. 【bzoj2661】[BeiJing wc2012]连连看 最大费用最大流

    题目描述 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭区间[a,b]中的全部整数,如果其中某两个数x,y(设x>y ...

  9. POJ - 2516 Minimum Cost(最小费用最大流)

    1.K种物品,M个供应商,N个收购商.每种物品从一个供应商运送到一个收购商有一个单位运费.每个收购商都需要K种物品中的若干.求满足所有收购商需求的前提下的最小运费. 2.K种物品拆开来,分别对每种物品 ...

随机推荐

  1. Struts2实现登录流程

    本节将演示一个基本的登录流程,在登录界面中若输入正确的用户名和密码,跳转到登录成功界面:否则路转到登录失败界面. 1 建立一个名为LoginDemo的动态Web项目 2 添加struts2相关的jar ...

  2. 把自动机用作 Key-Value 存储

    以前只有代码,最近简单写了一点文档: google code 上的链接(总是最新) 自动机是什么 DFA 的最小化 将 DFA 用做字典 无环DFA (ADFA, Acyclic DFA) 编译 内存 ...

  3. iptables不小心把127.0.0.1封了,导致redis连不上

    写了个脚本扫描apache日志,自动把恶意攻击者的ip交给iptables给封掉 谁知道一不小心把127.0.0.1也给封了... 直接导致redis无法链接. redis-server服务正常启动, ...

  4. 封装自用的脚本ajax.js

    function createxmlhttp() { xmlhttpobj = false; try{//创建对象,一个一个的试,哎,要是能统一标准都好.. xmlhttpobj = new XMLH ...

  5. java线程总结(2/5)

    线程基本信息和优先级别 方  法 功        能 isAlive() 判断线程是否还“活”着,即线程是否还未终止. getPriority() 获得线程的优先级数值 setPriority() ...

  6. Office办公 如何打印顺丰发票

    1 关注顺丰速递,我-我的钱包 2 我的钱包-发票申请 3 勾选要打印发票的项目,点击申请发票 4 点击提交,确认发送的邮箱(他是把PDF发到指定邮箱)   最后PDF效果如下             ...

  7. Pthreads并行编程之spin lock与mutex性能对比分析(转)

    POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API.线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用 ...

  8. 剑指OFFER之二叉搜索树与双向链表(九度OJ1503)

    题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 输入: 输入可能包含多个测试样例.对于每个测试案例,输入的第一行为一个数 ...

  9. 关于Future.cancel(mayInterruptIfRunning)方法的参数的问题

    mayInterruptIfRunning设成false话,不允许在线程运行时中断,设成true的话就允许. 可以参考下面的代码来理解,如果设为false的话,会打印到99999,如果设成true的话 ...

  10. hdu1350Taxi Cab Scheme (最小路径覆盖)

    Taxi Cab Scheme Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...