UVA 11613 Acme Corporation(不固定流量的最小费用流)
题意好长。。。。变量好多。。。。
增加源点跟汇点。然后将每个月份看成一个点,然后拆成两个点u 跟 u+n。
从s向每个u连一条<n[u], m[i]>的弧,表示最多生产量及价值。
从每个u+n向t连一条<s[i], -p[i]>的弧,表示最多销量及价值。
对于存放的情况 for(int j=0; j<=e[u] ; j++) if(u + j <= M) ,由u向u+j+M连一条<INF, I*j>的弧,表示存放所要花费的价值。
这题并不需要满足销量最大,也就是不固定流量的最小费用流,也就是说当s-t增广长度大于0的时候停止增广就行了。还有,稠密图ZKW效率不是太高。。。。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#define REP(i, n) for(int i=0; i<n; i++)
#define CLR(a, b) memset(a, b, sizeof(a))
#define FF(i, a, b) for(int i=a; i<b; i++)
#define LL long long
using namespace std; const int maxn = 300;
const int maxe = maxn*maxn/2;
const int INF = 1e9; struct ZKW_flow
{
int st, ed, ecnt, n;
int head[maxn], dis[maxn];
int cap[maxe], cost[maxe], to[maxe], next[maxe]; void init()
{
CLR(head, 0);
ecnt = 2;
} void AddEdge(int u, int v, int cc, int ww)
{
cap[ecnt] = cc; cost[ecnt] = ww; to[ecnt] = v;
next[ecnt] = head[u]; head[u] = ecnt++;
cap[ecnt] = 0; cost[ecnt] = -ww; to[ecnt] = u;
next[ecnt] = head[v]; head[v] = ecnt++;
} void spfa()
{
REP(i, n+1) dis[i] = INF;
priority_queue<pair<int, int> > q;
dis[st] = 0;
q.push(make_pair(0, st));
while(!q.empty())
{
int u = q.top().second, d = -q.top().first;
q.pop();
if(dis[u] != d) continue;
for(int p=head[u]; p; p=next[p])
{
int& v = to[p];
if(cap[p] && dis[v] > d+cost[p])
{
dis[v] = d + cost[p];
q.push(make_pair(-dis[v], v));
}
}
}
REP(i, n+1) dis[i] = dis[ed] - dis[i];
}
LL Mincost, Maxflow;
bool use[maxn]; int add_flow(int u, int flow)
{
if(u == ed)
{
if(dis[st] > 0) return flow;//不固定流量的最小费用流
Maxflow += flow;
Mincost += (LL)dis[st] * (LL)flow;
return flow;
}
use[u] = true;
int now = flow;
for(int p=head[u]; p; p=next[p])
{
int& v = to[p];
if(cap[p] && !use[v] && dis[u] == dis[v] + cost[p])
{
int tmp = add_flow(v, min(now, cap[p]));
cap[p] -= tmp;
cap[p^1] += tmp;
now -= tmp;
if(!now) break;
}
}
return flow - now;
} bool modify_lable()
{
int d = INF;
REP(u, n+1) if(use[u])
for(int p=head[u]; p; p=next[p])
{
int& v = to[p];
if(cap[p] && !use[v])
d = min(d, dis[v] + cost[p] - dis[u]);
}
if(d == INF) return false;
REP(i, n+1) if(use[i]) dis[i] += d;
return true;
} LL MCMF(int ss, int tt, int nn)
{
st = ss; ed = tt; n = nn;
Mincost = Maxflow = 0;
spfa();
while(true)
{
while(true)
{
CLR(use, 0);
if(!add_flow(st, INF)) break;
}
if(!modify_lable()) break;
}
return Mincost;
}
}solver; int T, M, I, st, ed;
int m[maxn], n[maxn], p[maxn], s[maxn], e[maxn]; int main()
{
scanf("%d", &T);
FF(kase, 1, T+1)
{
scanf("%d%d", &M, &I);
solver.init();
st = 0, ed = M * 2 + 1;
FF(i, 1, M+1) scanf("%d%d%d%d%d", &m[i], &n[i], &p[i], &s[i], &e[i]); FF(i, 1, M+1)
{
solver.AddEdge(st, i, n[i], m[i]);
solver.AddEdge(i+M, ed, s[i], -p[i]);
REP(j, e[i]+1) if(i + j <= M)
solver.AddEdge(i, i+j+M, n[i], I*j);
else break;
} printf("Case %d: %lld\n", kase, -solver.MCMF(st, ed, ed));
}
return 0;
}
UVA 11613 Acme Corporation(不固定流量的最小费用流)的更多相关文章
- Acme Corporation UVA - 11613 拆点法+最大费用最大流(费用取相反数)+费用有正负
/** 题目:Acme Corporation UVA - 11613 拆点法+最大费用最大流(费用取相反数)+费用有正负 链接:https://vjudge.net/problem/UVA-1161 ...
- UVA11613 Acme Corporation —— 最小费用流(流量不固定的最小费用流)
题目链接:https://vjudge.net/problem/UVA-11613 题意: 商品X在第i个月内:生产一件需要花费mi元,最多可生产ni件,销售一件(在这个月内销售,而不管它是在那个月生 ...
- Acme Corporation UVA - 11613 费用流
Code: #include<cstdio> #include<cstring> #include<vector> #include<queue> #i ...
- UVA 11248 - Frequency Hopping(网络流量)
UVA 11248 - Frequency Hopping 题目链接 题意:给定一个网络,如今须要从1到N运输流量C,问是否可能,假设可能输出可能,假设不可能,再问能否通过扩大一条边的容量使得可能,假 ...
- UVa11613 Acme Corporation(最小费用流)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33452 [思路] 最小费用流. 构图: 1 每个月建立2个点,建立 ...
- UVA-11613 Acme Corporation (最大费用最大流+拆点)
题目大意:有一种商品X,其每每单位存放一个月的代价I固定.并且已知其每月的最大生产量.生产每单位的的代价.最大销售量和销售单价,还已知每个月生产的X能最多能存放的时间(以月为单位).问只考虑前m个月, ...
- UVA 1659 Help Little Laura 帮助小劳拉 (最小费用流,最小循环流)
(同时也是HDU 2982,UVA的数据多) 题意:平面上有m条有向线段连接了n个点.你从某个点出发顺着有向线段行走,给走过的每条线段涂一种不同的颜色,最后回到起点.你可以多次行走,给多个回路涂色(要 ...
- UVa1658 Admiral(拆点法+最小费用流)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51253 [思路] 固定流量的最小费用流. 拆点,将u拆分成u1和u ...
- OC编程之道-创建对象之抽象工厂方法
定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类. <AbstractProductA> <AbstractProductB> <Ab ...
随机推荐
- python 全栈开发,Day80(博客系统分析,博客主页展示)
一.博客系统分析 数据库的构建 首先,我们分析一个博客系统的功能: 一个博客可以有多个标签(多对多) 一个博客可以有多条评论(一对多) 一个博客只可以有一个类别(多对一) 接下来,我们分析关系的属性: ...
- 2018-2019-2 网络对抗技术 20165333 Exp3 免杀原理与实践
实验内容 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧 使用msf编码器生成各种后门程序及检测 使 ...
- java 泛型 ? 和 T的区别
看了一个CSDN的问题,感觉就清楚了:http://bbs.csdn.net/topics/300181589/ 摘录其中的重点: 泛型方法: public <T extends Object& ...
- 百度地图API如何给自定义覆盖物添加事件
摘要: 给marker.lable.circle等Overlay添加事件很简单,直接addEventListener即可.那么,自定义覆盖物的事件应该如何添加呢?我们一起来看一看~ --------- ...
- C#: 执行批处理文件(*.bat)的方法
static void Main(string[] args) { Process proc = null; try { proc = new Process(); proc.StartInfo.Fi ...
- CSS3滚动条美化,CSS3滚动条皮肤
CSS3 -webkit-scrollbar滚动条皮肤美化实现,利用-webkit-scrollbar,-webkit-scrollbar-track,-webkit-scrollbar-thumb这 ...
- ajax请求案例
let url="loginToIndex"; $.ajax({ url:url,//请求的url type:"POST",//请求方式 async:false ...
- Linux 内核的定时机制实验
参考链接: Linux struct itimerval用法: http://blog.csdn.net/hbuxiaofei/article/details/35569229 Linux定时器实验: ...
- springboot springcloud 父项目pom工程创建pom文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- golang编译源代码和交叉编译方法
目录 golang编译源代码和交叉编译方法 编译源代码 编译go1.4 编译go1.12 交叉编译 golang编译源代码和交叉编译方法 编译源代码 golang编译其实很简单,下载一份最新的源代码后 ...