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

时间:2021-06-17 00:36:51

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

【题目大意】

  给出一张无向边权图,每个点最多可以生产b[i]商品,每件代价为a[i],
  每个点最多可以卖出d[i]商品,收益为c[i],
  每个商品在每条边上的运输价值为数量乘长度,求最大纯收益

【题解】

  我们从源点向每个点连价值为-c,流量为d的边
  由每个点连价值为a,流量为b的边,计算最小费用可行流就是答案。

【代码】

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
const int N=2000,M=10000;
namespace Min_Cost_Max_Flow{
const int INF=0x3f3f3f3f;
int S,T,cnt,ans,d[N],from[N],g[N],flow;
struct edge{int from,to,nxt,c,v;}e[M];
void add(int u,int v,int w,int c){
e[++cnt].from=u;e[cnt].to=v;
e[cnt].nxt=g[u];g[u]=cnt;
e[cnt].c=c;e[cnt].v=w;
}void add_edge(int u,int v,int w,int c){add(u,v,w,c);add(v,u,0,-c);}
bool spfa(){
memset(d,INF,sizeof(d)); d[S]=0;
memset(from,0,sizeof(from));
queue<int> q; q.push(S);
while(!q.empty()){
int now=q.front(); q.pop();
for(int i=g[now];i;i=e[i].nxt){
if(e[i].v&&d[e[i].to]>d[now]+e[i].c){
d[e[i].to]=d[now]+e[i].c;
from[e[i].to]=i;
q.push(e[i].to);
}
}
}return(d[T]<=0); // 求可行流最小费用,因此当费用增量大于0时不继续增加流量
}
void mcf(){
int x=INF;
for(int i=from[T];i;i=from[e[i].from])x=min(x,e[i].v);flow+=x;
for(int i=from[T];i;i=from[e[i].from]){e[i].v-=x;e[i^1].v+=x;ans+=e[i].c*x;}
}
void Initialize(int n){
memset(g,0,sizeof(g));
memset(e,0,sizeof(e));
ans=flow=0; cnt=1;
S=0,T=n+1;
}
void doit(){while(spfa())mcf();}
}
int n,m,G[N][N];
using namespace Min_Cost_Max_Flow;
int main(){
while(~scanf("%d%d",&n,&m)){
Initialize(n);
for(int i=1;i<=n;i++){
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
add_edge(S,i,d,-c);
add_edge(i,T,b,a);
}memset(G,INF,sizeof(G));
for(int i=1;i<=m;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
if(z<G[x][y]){
G[x][y]=G[y][x]=z;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i!=j&&G[i][j]!=INF){
add_edge(i,j,INF,G[i][j]);
}
}
}doit();
printf("%d\n",-ans);
}return 0;
}

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

  1. hdu 6118度度熊的交易计划&lpar;费用流&rpar;

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

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

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

  3. HDU 6118 度度熊的交易计划 &lpar;最小费用流&rpar;

    度度熊的交易计划 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 度度熊的交易计划&lpar;最小费用最大流&rpar;

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

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

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

  7. HDU 6118 度度熊的交易计划&lpar;网络流-最小费用最大流&rpar;

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

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

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

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

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

随机推荐

  1. Maven——eclipse中使用Maven创建Web项目

    原文:http://www.cnblogs.com/xdp-gacl/p/4054814.html 一.创建Web项目 1.1 选择建立Maven Project 选择File -> New - ...

  2. sql统计重复数据

    sql代码如下: 统计重复的数据 select MingCheng from tabShouFeiGongShi group by MingCheng having count(MingCheng) ...

  3. 未能加载Connector&sol;NET &colon;&colon; v6&period;7&period;4

    //从*.config文件获取连接字符串和提供程序 string dp = ConfigurationManager.AppSettings["provider"]; string ...

  4. 怎么利用SQL语句查询数据库中具体某个字段的重复行

    select * from [tablename] group by SeriNohaving count(SeriNo)<>1

  5. 【转载】关于Python脚本开头两行的:&num;&excl;&sol;usr&sol;bin&sol;python和&num; -&ast;- coding&colon; utf-8 -&ast;-的作用 – 指定文件编码类型

    1.#!/usr/bin/python 是用来说明脚本语言是 python 的 是要用 /usr/bin下面的程序(工具)python,这个解释器,来解释 python 脚本,来运行 python 脚 ...

  6. IDEA去除自动检测bean是否存在

    操作步骤如下图所示:

  7. 7&period;Python 正则表达式学习笔记

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...

  8. linux ubuntu R 无法安装rggobi包的原因及解决方案

    错误信息 Package'libxml-2.0',requiredby'ggobi',notfound     错误原因 ggobi缺乏libxml依赖 解决方案 sudo apt install l ...

  9. Kakfa的设计思想

    Kafka Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实 ...

  10. 概率dp总结

    终于做到概率dp题了,开个总结帖记录一下 首先是几篇论文:有关概率和期望问题的研究 做了这么多题,实际上没什么特别好总结的,就是搞清状态和转移,顺着写就行了,和基本dp差不多 概率是由过去到现在dp[ ...