HDU 6118 度度熊的交易计划 【最小费用最大流】 (2017"百度之星"程序设计大赛 - 初赛(B))
度度熊的交易计划
Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1111 Accepted Submission(s): 403Problem 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]<=nOutput输出最多能赚多少钱。Sample Input2 1
5 5 6 1
3 5 7 7
1 2 1Sample Output23SourceRecommend
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=6118
题目大意:
N个城市,M条公路,每个城市花费a[i]元生产1个商品,但是最多生产b[i]个,以c[i]的价格出售最多d[i]个商品,每条公路每运送1个商品花费e[i],问最大收益
题目思路:
【最小费用最大流】
首先很容易想到是网络流问题,城市之间连得公路容量∞,费用为e[i],
源S到每个城市建一条容量b,费用a的边,每个城市到汇T建一条容量d费用-c的边
然后每个城市再向汇T连一条容量为b,费用为-a的边(等于不卖),这样就满足最大流性质。
然后跑一遍最小费用最大流即可。
/****************************************************
Author : Coolxxx
Copyright 2017 by Coolxxx. All rights reserved.
BLOG : http://blog.csdn.net/u010568270
****************************************************/
#include<bits/stdc++.h>
#pragma comment(linker,"/STACK:1024000000,1024000000")
#define abs(a) ((a)>0?(a):(-(a)))
#define lowbit(a) (a&(-a))
#define sqr(a) ((a)*(a))
#define mem(a,b) memset(a,b,sizeof(a))
const double EPS=0.00001;
const int J=;
const int MOD=;
const int MAX=0x7f7f7f7f;
const double PI=3.14159265358979323;
const int N=;
const int M=;
using namespace std;
typedef long long LL;
double anss;
LL aans;
int cas,cass;
int n,m,lll,ans;
struct xxx
{
int next,e,q,cost;
}a[M];
int last[N],d[N],hs[N];
int S,T,nn;
bool mark[N],K;
void add(int x,int y,int z,int c)
{
a[++lll].next=last[x];
last[x]=lll;
a[lll].e=y;
a[lll].q=z;
a[lll].cost=c;
}
void build()
{
int i,j,k,x,y,z;
S=n+,T=n+;
nn=T;
for(i=;i<=n;i++)
{
scanf("%d%d%d%d",&x,&y,&z,&k);
add(S,i,y,x);
add(i,S,,-x);
add(i,T,y,-x);
add(T,i,,x);
add(i,T,k,-z);
add(T,i,,z);
}
for(i=;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,MAX,z);
add(y,x,,-z);
add(y,x,MAX,z);
add(x,y,,-z);
}
}
bool spfa()
{
int qq[M+M];
int i,now,head,tail;
//mem(mark,0);mem(d,0x7f);
for(i=;i<=nn;i++)mark[i]=,d[i]=MAX;
head=N;tail=N;
qq[N]=S;
d[S]=;mark[S]=;
while(head<=tail)
{
now=qq[head];
head++;
for(i=last[now];i;i=a[i].next)
{
if(a[i].q> && d[now]+a[i].cost<d[a[i].e])
{
d[a[i].e]=d[now]+a[i].cost;
if(!mark[a[i].e])
{
mark[a[i].e]=;
if(d[a[i].e]<d[qq[head]])
qq[--head]=a[i].e;
else
qq[++tail]=a[i].e;
}
}
}
mark[now]=;
}
if(d[T]==MAX)return ;
else return ;
}
int dfs(int u,int f)
{
int v,i,tt,asp=;
if(u==T)
{
K=;
return f;
}
mark[u]=;
for(i=last[u];i;i=a[i].next)
{
if(!mark[a[i].e] && a[i].q> && d[u]+a[i].cost==d[a[i].e])
{
tt=dfs(a[i].e,min(a[i].q,f-asp));
a[i].q-=tt;
a[i^].q+=tt;
ans+=tt*a[i].cost;
asp+=tt;
if(asp==f)
return f;
}
}
return asp;
}
void mincostflow()
{
while()
{
if(!spfa())break;
K=;
while(K)
{
K=;
mem(mark,);
dfs(S,MAX);
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("1.txt","r",stdin);
// freopen("2.txt","w",stdout);
#endif
int i,j,k;
int x,y,z;
// for(scanf("%d",&cass);cass;cass--)
// init();
// for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
while(~scanf("%d",&n))
{
scanf("%d",&m);
mem(last,);
lll=;ans=;
build();
mincostflow();
cout<<-ans<<endl;
}
return ;
}
/*
//
//
*/
HDU 6118 度度熊的交易计划 【最小费用最大流】 (2017"百度之星"程序设计大赛 - 初赛(B))的更多相关文章
- HDU 6113 度度熊的01世界 【DFS】(2017"百度之星"程序设计大赛 - 初赛(A))
度度熊的01世界 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 6118 度度熊的交易计划(最小费用最大流)
Problem Description度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题: 喵哈哈村以及周围的村庄可以看做是一共由n个片区,m条公路组成的地区. 由于生产能力的区别,第i个 ...
- HDU 6118 度度熊的交易计划 最大费用可行流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6118 题意:中文题 分析: 最小费用最大流,首先建立源点 s ,与超级汇点 t .因为生产一个商品需要 ...
- HDU 6109 数据分割 【并查集+set】 (2017"百度之星"程序设计大赛 - 初赛(A))
数据分割 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU 6108 小C的倍数问题 【数学】 (2017"百度之星"程序设计大赛 - 初赛(A))
小C的倍数问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- 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 度度熊的交易计划
度度熊的交易计划 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 ...
随机推荐
- SPOJ GSS7 Can you answer these queries VII ——树链剖分 线段树
[题目分析] 问题放到了树上,直接链剖+线段树搞一搞. 调了300行+. (还是码力不够) [代码] #include <cstdio> #include <cstring> ...
- HDU 1724 Ellipse ——Simpson积分
[题目分析] 一看题目,直接把椭圆积分起来就可以了嘛. 然后发现椭圆比较难积分,还是算了吧. 用Simpson积分硬上. 大概就是用二次函数去拟合面积. [代码] #include <cstdi ...
- noip2018——题解&总结
近期正在疯狂复习某些东西,这篇博客尽量年底更完……(Day2T2除外) 好了,所有的希望都破灭了,原来这就是出题人的素质.——一个被欺骗的可怜 $OIer$ 人生中倒数第三次 $noip$ (Mayb ...
- win10安装virtualbox发生严重错误
转载自:http://blog.csdn.net/ljw124213/article/details/50545101 Windows 10 系统在安装VirtualBox即将完毕时,突然回退,提示错 ...
- 对象数据源objectdatasource的使用,类的编写实现查询增删改的方法
原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- Laravel 报500错误
Laravel报500错误 发生情境: 使用Composer安装Laravel5.1版本到本地wamp环境,可以成功访问框架首页,然后上传到服务器上,报500错误. 解决: (1)在首页public/ ...
- Linux 下tomcat的配置
参考文档:http://blog.csdn.net/jeamking/article/details/7881196 http://www.cnblogs.com/panxuejun/p/618641 ...
- AC日记——香甜的黄油 codevs 2038
2038 香甜的黄油 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 农夫Jo ...
- Java常用几种加密算法
对称加密算法是应用较早的加密算法,技术成熟.在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yue)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去.收信方收到密文后,若想解 ...
- IntelliJ IDE 各种插件的安装和使用
插件的安装和使用持续的更新中...........................................................