P1251 餐巾计划问题
传送门
这是第二道题,比第一道题难想,主要是建图。题目中说到,每天结束时,餐厅必须决定将多少块脏的餐巾送到快洗部,多少块餐巾送到慢洗部,以及多少块保存起来延期送洗。一天有两种情况,白天干净的餐巾,晚上脏的餐巾,所以将一个点拆成两个点,一个是脏餐巾,一个是干净餐巾。源点连接脏餐巾数,汇点连干净餐巾书(这点未能搞清楚)。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
const int maxn=100010;
bool vis[maxn];
int s,t,dis[maxn],pre[maxn],last[maxn],flow[maxn];
ll maxflow,mincost;
int r[maxn];
//dis×îС»¨·Ñ;preÿ¸öµãµÄÇ°Çý£»lastÿ¸öµãµÄËùÁ¬µÄÇ°Ò»Ìõ±ß£»flowÔ´µãµ½´Ë´¦µÄÁ÷Á¿
struct Edge{int to,next;//flowÁ÷Á¿ dis»¨·Ñ ll flow,dis;
}edge[maxn];
int head[maxn],num_edge;
void add_edge(int from,int to,ll flow,ll dis)
{edge[++num_edge].next=head[from];edge[num_edge].to=to;edge[num_edge].flow=flow;edge[num_edge].dis=dis;head[from]=num_edge;
}
ll min(ll a,ll b){if(a<b) return a;else return b;
}
bool spfa(int s,int t)
{memset(dis,0x7f,sizeof(dis));memset(flow,0x7f,sizeof(flow));memset(vis,0,sizeof(vis));queue <int> q;q.push(s); vis[s]=1; dis[s]=0; pre[t]=-1;while (!q.empty()){int now=q.front();q.pop();vis[now]=0;for (int i=head[now]; i!=-1; i=edge[i].next){if (edge[i].flow>0 && dis[edge[i].to]>dis[now]+edge[i].dis)//Õý±ß {dis[edge[i].to]=dis[now]+edge[i].dis;pre[edge[i].to]=now;last[edge[i].to]=i;flow[edge[i].to]=min(flow[now],edge[i].flow);//if (!vis[edge[i].to]){vis[edge[i].to]=1;q.push(edge[i].to);}}}}return pre[t]!=-1;
}void MCMF()
{while (spfa(s,t)){int now=t;maxflow+=flow[t];mincost+=flow[t]*dis[t];while (now!=s){//´ÓÔ´µãÒ»Ö±»ØËݵ½»ãµã edge[last[now]].flow-=flow[t];//flowºÍdisÈÝÒ׸ã»ì edge[last[now]^1].flow+=flow[t];now=pre[now];}}
}int main()
{memset(head,-1,sizeof(head)); num_edge=-1;//³õʼ»¯ int n,p,t1,f1,t2,f2;scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&r[i]);scanf("%d%d%d%d%d",&p,&t1,&f1,&t2,&f2);s=0;t=2*n+1;for(int i=1;i<=n;i++){add_edge(s,i+n,r[i],0),add_edge(i+n,s,0,0);add_edge(i,t,r[i],0),add_edge(t,i,0,0);}for(int i=1;i<=n;i++){add_edge(s,i,INF,p);add_edge(i,s,0,-p);if(i+1<=n) add_edge(i+n,i+1+n,INF,0),add_edge(i+1+n,i+n,0,0);if(i+t1<=n) add_edge(i+n,i+t1,INF,f1),add_edge(i+t1,i+n,0,-f1);if(i+t2<=n) add_edge(i+n,i+t2,INF,f2),add_edge(i+t2,i+n,0,-f2);}MCMF();printf("%lld\n",mincost);return 0;
}
P1251 餐巾计划问题相关推荐
- 洛谷P1251 餐巾计划问题 无汇源最小费用流
题目描述 一个餐厅在相继的 NN 天里,每天需用的餐巾数不尽相同.假设第 ii 天需要 r_iri块餐巾( i=1,2,...,N).餐厅可以购买新的餐巾,每块餐巾的费用为 pp 分;或者把旧餐巾送 ...
- 费用流 ---- P1251 餐巾计划问题[拆点](网络流24题)
题目链接 题目大意: 解题思路 将脏餐巾以f元/条送到快洗部,过m天后,干净餐巾送回来使用 将脏餐巾以s元/条送到慢洗部,过n天后,干净餐巾送回来使用 延期送洗(可能会出现之后餐巾需求过少,并不需要所 ...
- 洛谷 - P1251 餐巾计划问题(最小费用最大流+思维建边)
题目链接:点击查看 题目大意:给出n天每天所需要的新餐巾的数量,现在有多种方式可以获得新餐巾,问如何运营能使花费最少: 直接购买,花费为cost 将脏餐巾送到快洗部,需要洗t1天,花费为c1 将脏餐巾 ...
- P1251 餐巾计划问题 费用流
https://www.luogu.org/problemnew/show/P1251 题意 有一家酒店,酒店每天需要ri张桌布,桌布可以现买,p元.可以通过快洗店,等m天,f元.可以通过慢洗店,等n ...
- 洛谷P4480 【[BJWC2018]餐巾计划问题】
这道题和网络流 \(24\) 题中的餐巾计划的确不一样, \([\) \(BJWC\) \(2018\) \(]\) 餐巾计划问题的数据范围更大. 一个餐厅在相继的 \(n\) 天里,每天需用的餐巾数 ...
- 初识费用流 模板(spfa+slf优化) 餐巾计划问题
今天学习了最小费用最大流,是网络流算法之一.可以对于一个每条边有一个容量和一个费用(即每单位流的消耗)的图指定一个源点和汇点,求在从源点到汇点的流量最大的前提下的最小费用. 这里讲一种最基础也是最好掌 ...
- 【网络流24题】餐巾计划问题(最小费用最大流)
[网络流24题]餐巾计划问题(最小费用最大流) 题面 COGS 洛谷上的数据范围更大,而且要开longlong 题解 餐巾的来源分为两种: ①新买的 ②旧的拿去洗 所以,两种情况分别建图 先考虑第一种 ...
- 餐巾计划问题 线性规划与网络流24题之10 费用流
相关知识:最小费用(最大)流 问题描述: 一个餐厅在相继的N 天里, 每天需用的餐巾数不尽相同. 假设第i天需要ri块餐巾(i=1, 2,-,N).餐厅可以购买新的餐巾,每块餐巾的费用为p分:或者把旧 ...
- 网络流24题 餐巾计划(DCOJ8008)
题目描述 一个餐厅在相继的 n nn 天里,每天需用的餐巾数不尽相同.假设第 i ii 天需要 ri r_iri 块餐巾.餐厅可以购买新的餐巾,每块餐巾的费用为 P PP 分:或者把旧餐巾送到快 ...
- [codevs 1237] 餐巾计划问题
http://codevs.cn/problem/1237/ 题解: 引用<24题>: 把每天分为二分图两个集合中的顶点Xi,Yi,建立附加源S汇T. 1.从S向每个Xi连一条容量为ri, ...
最新文章
- 面试题-自旋锁,以及jvm对synchronized的优化
- 与女儿谈商业模式 (3):沃尔玛的成功模式
- SQL Server 2005 和JBOSS 4 系统运行缓慢--高并发系统探讨(1)
- el-tree 权限 勾选_一周新债总结,最高涨30%,10月26日起可转债交易需要先开权限...
- esp32原理图设计_第十一章 ESP32的PWM全彩LED灯显示
- 博客园自动添加版权说明,自动添加文章链接
- P3273-[SCOI2011]棘手的操作【线段树,并查集】
- hibernate+struts2整合jar包冲突
- Java反射机制API
- etcd部署简单说明
- “+=”和append的区别
- 4个月掌握核心技术 成为云计算行业专家
- Java根据城市拼音首字母排序并进行分组
- VTN416多通道振弦采集仪多功能
- 计算机 键盘启动,键盘开机如何打开键盘
- JAVA毕业设计淮安城市开放大学实习实训管理系统计算机源码+lw文档+系统+调试部署+数据库
- Pdf.js 解决电子印章问题
- noi题库c语言 1.5答案,NOIP2004提高组复赛试题答案c语言版
- Java---Map详解
- Android屏幕适配方案
热门文章
- Google play上架被拒踩坑系列
- 翻译 Scribe : a way to aggregate data and why not, to directly fill the HDFS?
- MarkDown 编辑器字体改颜色大小等常用操作
- 故障分析 | OceanBase Proxy 无法连接 OBserver 集群
- 成绩排序(一)c++
- 云安全技术有什么特点?云安全包含哪些方面?
- 备战金九银十!2022Java面试必刷461道大厂架构面试真题汇总+面经+简历模板都放这了,注意划重点!!
- python数据可视化方法和库
- Paper Notes: Cross-Domain Image Translation Based on GAN
- 网卡基本配置2(主机名修改、网卡绑定)