题意:

度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题:

喵哈哈村以及周围的村庄可以看做是一共由n个片区,m条公路组成的地区。

由于生产能力的区别,第i个片区能够花费a[i]元生产1个商品,但是最多生产b[i]个。

同样的,由于每个片区的购买能力的区别,第i个片区也能够以c[i]的价格出售最多d[i]个物品。

由于这些因素,度度熊觉得只有合理的调动物品,才能获得最大的利益。

据测算,每一个商品运输1公里,将会花费1元。

那么喵哈哈村最多能够实现多少盈利呢?

1<=n<=500,
1<=m<=1000,
1<=a[i],b[i],c[i],d[i],k[i]<=1000,
1<=u[i],v[i]<=n

思路:明显的一个最小费用流模型 写的是最大费用流,注意没有要求流量最大

刚开始TooNaive先跑了一波最短路然后建的图

而后发现直接照原图建边,费用流过程中就会自动调整到最短路上

还是要学习一个

SPFA找的时候如果当前继续跑流会使利润减小就停止,即dis[src]<0

 const inf=;
var q:array[..]of longint;
f:array[..,..]of longint;
a,b,c,d,dis:array[..]of longint;
head,vet,len1,len2,next:array[..]of longint;
pre:array[..,..]of longint;
inq:array[..]of boolean;
fan:array[..]of longint;
n,m,i,tot,t1,s,source,src,x,y,z,j:longint;
ans1,ans2:int64; procedure add(a,b,c,d:longint);
begin
inc(tot);
next[tot]:=head[a];
vet[tot]:=b;
len1[tot]:=c;
len2[tot]:=d;
head[a]:=tot;
end; function min(x,y:int64):int64;
begin
if x<y then min:=x
else min:=y;
end; function spfa:boolean;
var u,e,v,t,w,i:longint;
begin
for i:= to s do
begin
dis[i]:=-(maxlongint>>);
inq[i]:=false;
end;
t:=; w:=; q[]:=source; dis[source]:=; inq[source]:=true;
while t<w do
begin
inc(t); u:=q[t mod ]; inq[u]:=false;
e:=head[u];
while e<> do
begin
v:=vet[e];
if (len1[e]>)and(dis[u]+len2[e]>dis[v]) then
begin
dis[v]:=dis[u]+len2[e];
pre[v,]:=u;
pre[v,]:=e;
if not inq[v] then
begin
inc(w); q[w mod ]:=v; inq[v]:=true;
end;
end;
e:=next[e];
end;
end;
//if dis[src]=-(maxlongint>>) then spfa:=false
// else spfa:=true;
if dis[src]< then spfa:=false
else spfa:=true;
end; procedure mcf;
var k,e:longint;
t:int64;
begin
k:=src; t:=<<;
while k<>source do
begin
t:=min(t,len1[pre[k,]]);
k:=pre[k,];
end;
k:=src;
while k<>source do
begin
e:=pre[k,];
len1[e]:=len1[e]-t;
len1[fan[e]]:=len1[fan[e]]+t;
ans2:=ans2+t*len2[e];
k:=pre[k,];
end;
end; begin
assign(input,'1005.in'); reset(input);
assign(output,'1005.out'); rewrite(output);
for i:= to do
if i and = then fan[i]:=i+
else fan[i]:=i-;
while not eof do
begin
read(n,m);
tot:=;
if (n=)and(m=) then break;
for i:= to n do read(a[i],b[i],c[i],d[i]);
tot:=;
for i:= to n do head[i]:=;
source:=n+; src:=n+; s:=n+;
for i:= to n do
begin
add(source,i,b[i],-a[i]);
add(i,source,,a[i]);
end;
for i:= to n do
begin
add(i,src,d[i],c[i]);
add(src,i,,-c[i]);
end; for i:= to m do
begin
read(x,y,z);
add(x,y,maxlongint,-z);
add(y,x,,z);
add(y,x,maxlongint,-z);
add(x,y,,z);
end;
ans1:=; ans2:=;
while spfa do mcf;
writeln(ans2);
for i:= to s do head[i]:=;
for i:= to s do dis[i]:=;
for i:= to s do
for j:= to do pre[i,j]:=;
end;
close(input);
close(output); end.

【HDOJ6118】度度熊的交易计划(费用流)的更多相关文章

  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. 2017"百度之星"程序设计大赛 - 初赛(B) 度度熊的交易计划 最小费用最大流求最大费用

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

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

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

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

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

  6. hdu 6118 度度熊的交易计划

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

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

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

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

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

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

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

随机推荐

  1. iOS开发之邮件发送代码

    邮件发送功能是由MessageUI Framework提供的,这个框架是iPhone sdk中最简单的框.由一个类.一个视图控制器,一个protocol组成. 一.创建视图控制器: MFMailCom ...

  2. outlook 通讯录分类--2017年1月16日--对联系人分类管理

    outlook功能多,复杂,导致打开界面就晕,通讯录分类 问:在Outlook 中,随着联系人数量的增多,亲朋好友.同事.客户的信息混杂在一起,每次发邮件都要用很长时间才能从联系人列表中找到需要的人. ...

  3. 关于使用myeclipse搭建tomcat环境运行web项目的方法

    这两天准备改同事的一个系统的自适应,然而我没想到的是我竟然在打开这个项目上就遇到了困难,真的是too young too simple,究其根本就是了解的太少了,于是为了我不忘记,用博客的方式把它记录 ...

  4. 2019最新版Devops工具集

    啥是Devops? 简单地来说,就是开发(DEV).测试(QA).运维(OPS)的流程,开发运维一体化,通过高度自动化工具与流程来使得软件构建.测试.发布更加快捷.频繁和可靠. 当然现实的DevOps ...

  5. iOS Programming NSUserDefaults

    iOS Programming NSUserDefaults  When you start an app for the first time, it uses its factory settin ...

  6. XCode的debug断点调试

    debug 流程控制 当你通过 Xcode 的源码编辑器的侧边槽 (或者通过下面的方法) 插入一个断点,程序到达断点时会就会停止运行. 调试条上会出现四个你可以用来控制程序的执行流程的按钮. 从左到右 ...

  7. Quartz2D知识点聚合案例

    Quartz2D知识点聚合 基本 //画图片 UIImage *image = [UIImage imageNamed:@"阿狸头像"]; [image drawInRect:re ...

  8. eclipse 升级note

    参考http://www.cnblogs.com/jiqingwu/archive/2013/05/26/eclipse_plugins_import.html. 最终决定采用 启动 eclipse. ...

  9. Ubuntu中update-grub2与update-grub的区别

    没有区别. Ubuntu 9.10及更高版本已安装GRUB2,但sudo update-grub仍然以标准命令为准. sudo update-grub和sudo update-grub2是等同的,所以 ...

  10. 检查sql对象是否存在

    SQL Server判断对象是否存在   1 判断数据库是否存在 Sql代码  if exists (select * from sys.databases where name = '数据库名')  ...