【UVA11613 训练指南】生产销售规划 【费用流】
题意:
Acme公司生产一种X元素,给出该元素在未来M个月中每个月的单位售价、最大产量、最大销售量,以及最大储存时间(过期报废不过可以储存任意多的量)。你的任务是计算出公司能够赚到的最大利润。
分析:
把第i个月拆成i1和i2两个点,连一条s到i1的弧,容量为i月最大产量,费用为单位成本。连一条i2到t的弧,容量为最大销量,费用为单位售价的相反数。然后i1向i2连一条容量为INF费用为0的弧,代表当月销售。i1向其他j2连弧,容量为INF,费用为储藏代价。
另外,这个题属于流量不固定的最小费用流。也就是说,并不是一定要跑到最大流。用spfa寻找增广路的时候,当d[t]>0的时候就要停止增广。
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <queue>
#include <vector> using namespace std;
typedef long long LL;
const int maxn=+;
const int maxm=+;
const int INF=; struct MCMF{
int head[maxn],to[maxm],Next[maxm],from[maxm],cost[maxm],flow[maxm],cap[maxm];
int n,m,s,t,sz;
int inq[maxn];
int d[maxn];
int p[maxn];
int a[maxn]; void init(int n){
this->n=n;
sz=-;
memset(head,-,sizeof(head));
}
void AddEdge(int a,int b,int ca,int co){
++sz;
to[sz]=b,from[sz]=a,Next[sz]=head[a],head[a]=sz;
flow[sz]=,cap[sz]=ca,cost[sz]=co;
++sz;
to[sz]=a,from[sz]=b,Next[sz]=head[b],head[b]=sz;
flow[sz]=ca,cap[sz]=ca,cost[sz]=-co;
}
bool BellmanFord(int s,int t,int &Flow,LL &Cost){
for(int i=;i<=n;i++)d[i]=INF;
memset(inq,,sizeof(inq));
d[s]=;inq[s]=;p[s]=-;a[s]=INF;
queue<int>Q;
Q.push(s);
while(!Q.empty()){
int u=Q.front();Q.pop();
inq[u]=;
for(int i=head[u];i!=-;i=Next[i]){
int v=to[i];
if(cap[i]>flow[i]&&d[v]>d[u]+cost[i]){
d[v]=d[u]+cost[i];
p[v]=i;
a[v]=min(a[u],cap[i]-flow[i]);
if(!inq[v]){
Q.push(v);
inq[v]=;
}
}
}
}
if(d[t]==INF||d[t]>)return false;
Flow+=a[t];
Cost+=(LL)d[t]*(LL)a[t];
int u=t; while(u!=s){
flow[p[u]]+=a[t];
flow[p[u]^]-=a[t];
u=from[p[u]];
}
return true;
} LL Mincost(int s,int t){
int Flow=;LL Cost=;
while(BellmanFord(s,t,Flow,Cost));
return Cost;
}
}mcmf;
const int maxM=;
int T,M,I,kase;
int m[maxM],n[maxM],p[maxM],s[maxM],E[maxM]; int main(){
scanf("%d",&T);
// freopen("out.txt","w",stdout);
kase=;
for(int t=;t<=T;t++){
++kase;
scanf("%d%d",&M,&I);
mcmf.init(*M+);
mcmf.s=;mcmf.t=*M+;
for(int i=;i<=M;i++){
scanf("%d%d%d%d%d",&m[i],&n[i],&p[i],&s[i],&E[i]);
mcmf.AddEdge(,i,n[i],m[i]);
mcmf.AddEdge(i+M,*M+,s[i],-p[i]);
for(int j=;j+i<=M&&j<=E[i];j++){
mcmf.AddEdge(i,i+j+M,INF,j*I);
}
}
LL ans=mcmf.Mincost(,*M+);
printf("Case %d: %lld\n",kase,-ans);
}
return ;
}
【UVA11613 训练指南】生产销售规划 【费用流】的更多相关文章
- BZOJ_4819_[Sdoi2017]新生舞会_01分数规划+费用流
BZOJ_4819_[Sdoi2017]新生舞会_01分数规划+费用流 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞 ...
- 【bzoj4819】[Sdoi2017]新生舞会 分数规划+费用流
题目描述 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间的关系,比如两个 ...
- 【uva11613】生产销售规划
这很像之前做的一道noip模拟题…… 所以当时那题也可以用费用流写(雾) 拆点,将每个月拆成两个点,一个向起点连边表示产量,另一个点连汇点表示销量. 然后每个点依次往后面的点2连边,表示保存. #in ...
- BZOJ.4819.[SDOI2017]新生舞会(01分数规划 费用流SPFA)
BZOJ 洛谷 裸01分数规划.二分之后就是裸最大费用最大流了. 写的朴素SPFA费用流,洛谷跑的非常快啊,为什么有人还T成那样.. 当然用二分也很慢,用什么什么迭代会很快. [Update] 19. ...
- 【BZOJ4819】[Sdoi2017]新生舞会 01分数规划+费用流
[BZOJ4819][Sdoi2017]新生舞会 Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女 ...
- [BZOJ4819][SDOI2017]新生舞会(分数规划+费用流,KM)
4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1097 Solved: 566[Submit][Statu ...
- P3705 [SDOI2017]新生舞会 01分数规划+费用流
$ \color{#0066ff}{ 题目描述 }$ 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴. 有\(n\)个男生和\(n\)个女生参加舞会买一个男生和一个女生一 ...
- BZOJ-4819: 新生舞会(01分数规划+费用流)
Description 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间 ...
- BZOJ 1920 Luogu P4217 [CTSC2010]产品销售 (模拟费用流、线段树)
题目链接 (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=1920 (luogu) https://www.luogu.org/prob ...
- [Sdoi2017]新生舞会(分数规划+费用流)
题解:二分答案mid,然后将每个位置看成a-b*mid,然后由于是n个男生和n个女生匹配,每个人搭配一个cp,于是有点类似于https://www.lydsy.com/JudgeOnline/prob ...
随机推荐
- 超详细的celery异步任务和定时任务的教程
转载自:https://segmentfault.com/a/1190000007780963
- vue-router教程二(要素篇之新手入门)
注意,我们将在指南中使用es 2015代码样本.此外,所有示例都将使用VUE的完整版本来使在线模板编译成为可能.请参阅这里的更多细节. 用vue路由器创建单页应用程序是非常简单的.使用vue.js,我 ...
- elixir jenkins 集成构建方式配置
备注: 主要问题是环境变量配置的问题,解决方法是使用软连接进行解决 1. 下载软件包 wget https://github.com/elixir-lang/elixir/releases/ ...
- istio 安装试用
1. 命令行工具 curl -L https://git.io/getIstio | sh - 2. 环境变量配置 export PATH=$PWD/bin:$PATH 3. RBAC 检验 kube ...
- Oracle 之 Cloning $oracle_home (克隆安装oracle软件)
用途:Cloning an Oracle Home , 可以免去多台机器重复安装oracle软件 1.停止相关进程[root@node1 bin]# ./crsctl stop cluster -al ...
- Iterations --codility
lesson 1:Iterations 1. BinaryGap-----[100%] Find longest sequence of zeros in binary representation ...
- Android Activity活动状态及生存周期
1.活动状态 每个活动在其生命周期中最多可能会有4中状态. (1)运行状态 当一个活动位于返回栈的栈顶时,此时活动就处于运行状态.系统不会回收处于运行状态的活动. (2)暂停状态 当一个活动不再处于栈 ...
- 空间的搜索与R树
在现实地图应用中,有个比较常见的问题,比如,你到了一个地方,想查查附近1km内有什么饭店. 这时地图应用就可以马上查询出周围有什么饭店,如果让你设计,你会怎么设计.假设局限在中国的地图上,共有1000 ...
- mac系统PHP 7.1.12安装xhprof并使用[View Full Callgraph]小记
前几天从php7.0.x 升级到了php7.2.0版本, 结果装xhprof没有找到能支持对应版本的xhprof 于是又安装了一个php7.1.2的版本(brew install h) 接着安装xhp ...
- WPF ComboBox下拉绑定Treeview 功能的实现
因为项目需要,接触到这个功能点,借助网络还有自己的一点摸索,实现了这个功能.相关代码如下: XAML部分的代码: <ComboBox Grid.Row=" RenderTransfor ...