【题目链接】 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度度熊的交易计划(费用流)

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

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

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

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

    度度熊的交易计划 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 度度熊的交易计划(最小费用最大流)

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

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

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

  7. HDU 6118 度度熊的交易计划(网络流-最小费用最大流)

    度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题: 喵哈哈村以及周围的村庄可以看做是一共由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"百度之星"程序设计大赛 - 初赛(B) 度度熊的交易计划 最小费用最大流求最大费用

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

随机推荐

  1. 03.WebView演练-iOS开发Demo(示例程序)源代码

    技术博客http://www.cnblogs.com/ChenYilong/   新浪微博http://weibo.com/luohanchenyilong   //转载请注明出处--本文永久链接:h ...

  2. Yii2 的 redis 应用

    在应用的时候需要先对yii2进行扩展安装 如果装有composer直接运行 php composer.phar require --prefer-dist yiisoft/yii2-redis 当然也 ...

  3. jquery实现简单轮播

    先上简单的html代码 <!DOCTYPE HTML> <html> <head> <link rel="stylesheet" type ...

  4. vue安装说明

    1.安装node.js(http://www.runoob.com/nodejs/nodejs-install-setup.html) --以下操作在nodejs安装路径下进行(记得不要在C盘)-- ...

  5. python使用unittest模块selenium访问斗鱼获取直播信息

    import unittest from selenium import webdriver from bs4 import BeautifulSoup as bs class douyu(unitt ...

  6. 85.Maximal Rectangle---dp

    题目链接:https://leetcode.com/problems/maximal-rectangle/description/ 题目大意:给出一个二维矩阵,计算最大的矩形面积(矩形由1组成).例子 ...

  7. MySQL三种备份

    一)备份分类 1 2 3 4 5 6 7 8 9 10 11 12 冷备:cold backup数据必须下线后备份 温备:warm backup全局施加共享锁,只能读,不能写 热备:hot backu ...

  8. Spring如何解析Dubbo标签

    1. 要了解Dubbo是如何解析标签的,首先要清楚一点就是Spring如何处理自定义标签的,因为Dubbo的标签可以算是Spring自定义标签的一种情况: 2. Spring通过两个接口来解析自定义的 ...

  9. TGPPen 宽度的理解

    procedure TForm4.Button1Click(Sender: TObject); var g: TGPGraphics; p: TGPPen; begin g := TGPGraphic ...

  10. 以太坊go-ethereum客户端查询交易列表(二)

    玩过比特币的朋友都知道,比特币是可以通过api(listtransactions)查询指定地址的历史交易的.但在eth中没有提供类似的查询api.今天这篇博客就简单介绍一下如果解决这个问题. 问题 以 ...