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

题意:中文题

分析:

最小费用最大流,首先建立源点 s ,与超级汇点 t 。因为生产一个商品需要花费 a[i] 元,且上限为 b[i] ,所以我们从 s 向这些点之间连一条容量为 b[i] ,费用为 a[i] 的边。同样的道理,出售一个商品可以赚到 c[i] 元,最多出售 d[i] 个,于是我们从这些点向 t 连一条容量为 d[i] ,费用为 -c[i] 的边。最后所有的公路也是花费,从 uv 连接一条双向边,容量为 INF ,费用为 k,然而要注意这道题并不是要求最大流,这道题要求的是可行流,这个只需要修改一下求增广的过程就可以了,最后答案就是费用流的相反数。

#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3FFFFFFF;
const int maxn = 2222;
struct node{
int st, en, flow, cost, next;
node(){}
node(int st, int en, int flow, int cost, int next):st(st),en(en),flow(flow),cost(cost),next(next){}
}E[101000]; int num, p[maxn];
void init(){
memset(p, -1, sizeof(p));
num = 0;
}
void add(int st, int en, int flow, int cost){
E[num] = node(st, en, flow, cost, p[st]);
p[st] = num++;
E[num] = node(en, st, 0, -cost, p[en]);
p[en] = num++;
}
int pre[maxn];
int dis[maxn];
bool fg[maxn];
bool spfa(int st, int en)
{
for(int i=0;i<=en;i++){
fg[i] = 0, dis[i] = inf, pre[i]=-1;
}
queue<int>q;
q.push(st);
fg[st]=1;
dis[st]=0;
while(!q.empty()){
int u = q.front(); q.pop();
fg[u]=0;
for(int i=p[u];~i;i=E[i].next){
int v = E[i].en;
if(E[i].flow&&dis[v]>dis[u]+E[i].cost){
dis[v] = dis[u]+E[i].cost;
pre[v]=i;
if(!fg[v]){
fg[v]=1;
q.push(v);
}
}
}
}
// if(dis[en] < inf) return 1;
// return 0;
return dis[en]<=0;
} int solve(int st, int en){
int ans=0;
while(spfa(st,en)){
int d = inf;
for(int i=pre[en];i+1;i=pre[E[i].st]) d = min(d, E[i].flow);
for(int i=pre[en];i+1;i=pre[E[i].st]){
E[i].flow -= d;
E[i^1].flow += d;
ans += d*E[i].cost;
}
}
return ans;
}
int main()
{
int n,m;
while (cin>>n>>m)
{
init();
int s=0,t=n+1,cost;
for (int i=1; i<=n; i++)
{
int a,b,c,d;
cin>>a>>b>>c>>d;
add(s,i,b,a);
add(i,t,d,-c);
}
while (m--)
{
int u,v,k;
cin>>u>>v>>k;
add(u,v,inf,k);
add(v,u,inf,k);
}
int ans = -solve(s,t);
printf("%d\n", ans);
}
return 0;
}

最新文章

  1. 在windows上如何安装python web引擎jinja2
  2. 实战:rsync+inotify实现数据实时同步
  3. c# 反射事件
  4. P1047 校门外的树
  5. 《CSAPP》读书杂记 - Chapter 2. Representing and Manipulating Information
  6. Exchange Web Service 获取邮件的附件并保存到本地的示例代码
  7. linux shell命令之 xargs
  8. HTTPS协议,TLS协议
  9. redis动态配置
  10. obj-c编程15[Cocoa实例03]:MVC以及归档化示例
  11. 云计算大数据:Xen、KVM、VMware、hyper-v等虚拟化技术的比较
  12. VS 附加到进程 加载“附加进程”弹窗很慢
  13. Golang 入门系列(五)GO语言中的面向对象
  14. 作业(更新ing)
  15. JEECG 集成KiSSO单点登录实现统一身份认证
  16. 故障小记录:yum 安装报错File &quot;/usr/bin/yum&quot;, line 30 except KeyboardInterrupt, e:
  17. TLS/SSL测试工具
  18. CodeReview工具Gerrit的python库pygerrit2
  19. jquery-json 插件使用方法
  20. Linux jstack分析cpu占用100%

热门文章

  1. 用select (多路复用)模拟一个 socket server
  2. Shell编程学习总结
  3. bzoj 3275: Number (最小割)
  4. POJ2774:Long Long Message——题解
  5. BZOJ1912 APIO2010 洛谷P3629 巡逻
  6. mysql的主从复制原理与实现
  7. ACM1325Is it A tree?
  8. Git版本管理1-安装配置和同步
  9. Elasticsearch6.0 IKAnalysis分词使用
  10. jQuery Lightbox效果插件Boxer