HDU 6118 度度熊的交易计划(最小费用最大流)
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说明以后的增广路都是亏钱,就可以直接跳出循环
代码
- #include<bits/stdc++.h>
- using namespace std;
- const int N=1e5+;
- const int M=2e5+;
- const int INF=0x3f3f3f3f;
- int FIR[N],FROM[M],TO[M],CAP[M],FLOW[M],COST[M],NEXT[M],tote;
- int pre[N],dist[N],q[];
- bool vis[N];
- int n,m,S,T;
- void init()
- {
- tote=;
- memset(FIR,-,sizeof(FIR));
- }
- void addEdge(int u,int v,int cap,int cost)
- {
- FROM[tote]=u;
- TO[tote]=v;
- CAP[tote]=cap;
- FLOW[tote]=;
- COST[tote]=cost;
- NEXT[tote]=FIR[u];
- FIR[u]=tote++;
- FROM[tote]=v;
- TO[tote]=u;
- CAP[tote]=;
- FLOW[tote]=;
- COST[tote]=-cost;
- NEXT[tote]=FIR[v];
- FIR[v]=tote++;
- }
- bool SPFA(int s, int t)
- {
- memset(dist,INF,sizeof(dist));
- memset(vis,false,sizeof(vis));
- memset(pre,-,sizeof(pre));
- dist[s] = ;vis[s]=true;q[]=s;
- int head=,tail=;
- while(head!=tail)
- {
- int u=q[++head];vis[u]=false;
- for(int v=FIR[u];v!=-;v=NEXT[v])
- {
- if(dist[TO[v]]>dist[u]+COST[v]&&CAP[v]>FLOW[v])
- {
- dist[TO[v]]=dist[u]+COST[v];
- pre[TO[v]]=v;
- if(!vis[TO[v]])
- {
- vis[TO[v]] = true;
- q[++tail]=TO[v];
- }
- }
- }
- }
- if(dist[t]>)return false;//亏钱
- return pre[t]!=-;
- }
- void MCMF(int s, int t, int &cost, int &flow)
- {
- flow=;
- cost=;
- while(SPFA(s,t))
- {
- int Min = INF;
- for(int v=pre[t];v!=-;v=pre[TO[v^]])
- Min = min(Min, CAP[v]-FLOW[v]);
- for(int v=pre[t];v!=-;v=pre[TO[v^]])
- {
- FLOW[v]+=Min;
- FLOW[v^]-=Min;
- cost+=COST[v]*Min;
- }
- flow+=Min;
- }
- }
- int main()
- {
- while(scanf("%d%d",&n,&m)!= EOF)
- {
- init();
- S=,T=n+;
- int u,v,a,b,c,d;
- for(int i=;i<=n;i++)
- {
- scanf("%d%d%d%d",&a,&b,&c,&d);
- addEdge(S,i,b,a);
- addEdge(i,T,d,-c);
- }
- for(int i=;i<=m;i++)
- {
- scanf("%d%d%d",&u,&v,&d);
- addEdge(u,v,0x3f3f3f3f,d);
- addEdge(v,u,0x3f3f3f3f,d);
- }
- int cost,flow;
- MCMF(S,T,cost,flow);
- printf("%d\n",-cost);
- }
- return ;
- }
HDU 6118 度度熊的交易计划(最小费用最大流)的更多相关文章
- HDU 6118 度度熊的交易计划 最大费用可行流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6118 题意:中文题 分析: 最小费用最大流,首先建立源点 s ,与超级汇点 t .因为生产一个商品需要 ...
- 2017"百度之星"程序设计大赛 - 初赛(B) 度度熊的交易计划 最小费用最大流求最大费用
/** 题目:度度熊的交易计划 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6118 题意:度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题 ...
- HDU 6118 度度熊的交易计划(费用流)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6118 [题目大意] 给出一张无向边权图,每个点最多可以生产b[i]商品,每件代价为a[i], 每个 ...
- HDU 6118 度度熊的交易计划 【最小费用最大流】 (2017"百度之星"程序设计大赛 - 初赛(B))
度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu 6118度度熊的交易计划(费用流)
度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu 6118 度度熊的交易计划
度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 6118 度度熊的交易计划 (最小费用流)
度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 6118 度度熊的交易计划(网络流-最小费用最大流)
度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题: 喵哈哈村以及周围的村庄可以看做是一共由n个片区,m条公路组成的地区. 由于生产能力的区别,第i个片区能够花费a[i]元生产1个商品,但 ...
- HDU 6118 2017百度之星初赛B 度度熊的交易计划(费用流)
度度熊的交易计划 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
随机推荐
- 机器学习进阶-图像基本操作-图像数据读取 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 使得读入的图片为 ...
- day28-面相对象的特殊成员、内置函数
1. isinstance与issubclass 1.1.isinstance(obj,cls) 检查obj是否是类cls的对象,或者是类cls的子类的对象 class A: pass class B ...
- unity "[ ]"标签
[CanEditMultipleObjects]//可多对象编辑 public class Collider2DEditor:Editor {} [SerializeField]//序列化私有属性 p ...
- map转换成JSON的3种方法
http://www.json.cn/JSON格式校验 1 json-lib <dependency> <groupId>net.sf.json-lib</groupId ...
- How to Pronounce the Word ARE
How to Pronounce the Word ARE Share Tweet Share Tagged With: ARE Reduction Study the ARE reduction. ...
- RabbitMQ系列教程之七:RabbitMQ的 C# 客户端 API 的简介(转载)
RabbitMQ系列教程之七:RabbitMQ的 C# 客户端 API 的简介 今天这篇博文是我翻译的RabbitMQ的最后一篇文章了,介绍一下RabbitMQ的C#开发的接口.好了,言归正传吧. N ...
- tap news:week5 0.0 create react app
参考https://blog.csdn.net/qtfying/article/details/78665664 先创建文件夹 安装create react app 这个脚手架(facebook官方提 ...
- js(鼠标键盘拖动事件)
拖动事件是h5(HTML5的) 1:draggable(true) 2:拖动源 ondragstart ,ondragend 3:目的地 ondraglenter,ondragover,ondragl ...
- Javascript中call、apply之我见
一.call和apply定义. 1.Call 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 参数 thisObj 可选项.将被用作当前对象的对象. arg ...
- Unity3d资源管理分析
原创链接:http://blog.csdn.net/ox_thedarkness/article/details/9197453 分离资源管理 参考 1.Unity3D占用内存太大的解决方法 - 星尘 ...