传送门

这是第二道题,比第一道题难想,主要是建图。题目中说到,每天结束时,餐厅必须决定将多少块脏的餐巾送到快洗部,多少块餐巾送到慢洗部,以及多少块保存起来延期送洗。一天有两种情况,白天干净的餐巾,晚上脏的餐巾,所以将一个点拆成两个点,一个是脏餐巾,一个是干净餐巾。源点连接脏餐巾数,汇点连干净餐巾书(这点未能搞清楚)。

#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 餐巾计划问题相关推荐

  1. 洛谷P1251 餐巾计划问题 无汇源最小费用流

    题目描述 一个餐厅在相继的 NN 天里,每天需用的餐巾数不尽相同.假设第 ii 天需要 r_iri​块餐巾( i=1,2,...,N).餐厅可以购买新的餐巾,每块餐巾的费用为 pp 分;或者把旧餐巾送 ...

  2. 费用流 ---- P1251 餐巾计划问题[拆点](网络流24题)

    题目链接 题目大意: 解题思路 将脏餐巾以f元/条送到快洗部,过m天后,干净餐巾送回来使用 将脏餐巾以s元/条送到慢洗部,过n天后,干净餐巾送回来使用 延期送洗(可能会出现之后餐巾需求过少,并不需要所 ...

  3. 洛谷 - P1251 餐巾计划问题(最小费用最大流+思维建边)

    题目链接:点击查看 题目大意:给出n天每天所需要的新餐巾的数量,现在有多种方式可以获得新餐巾,问如何运营能使花费最少: 直接购买,花费为cost 将脏餐巾送到快洗部,需要洗t1天,花费为c1 将脏餐巾 ...

  4. P1251 餐巾计划问题 费用流

    https://www.luogu.org/problemnew/show/P1251 题意 有一家酒店,酒店每天需要ri张桌布,桌布可以现买,p元.可以通过快洗店,等m天,f元.可以通过慢洗店,等n ...

  5. 洛谷P4480 【[BJWC2018]餐巾计划问题】

    这道题和网络流 \(24\) 题中的餐巾计划的确不一样, \([\) \(BJWC\) \(2018\) \(]\) 餐巾计划问题的数据范围更大. 一个餐厅在相继的 \(n\) 天里,每天需用的餐巾数 ...

  6. 初识费用流 模板(spfa+slf优化) 餐巾计划问题

    今天学习了最小费用最大流,是网络流算法之一.可以对于一个每条边有一个容量和一个费用(即每单位流的消耗)的图指定一个源点和汇点,求在从源点到汇点的流量最大的前提下的最小费用. 这里讲一种最基础也是最好掌 ...

  7. 【网络流24题】餐巾计划问题(最小费用最大流)

    [网络流24题]餐巾计划问题(最小费用最大流) 题面 COGS 洛谷上的数据范围更大,而且要开longlong 题解 餐巾的来源分为两种: ①新买的 ②旧的拿去洗 所以,两种情况分别建图 先考虑第一种 ...

  8. 餐巾计划问题 线性规划与网络流24题之10 费用流

    相关知识:最小费用(最大)流 问题描述: 一个餐厅在相继的N 天里, 每天需用的餐巾数不尽相同. 假设第i天需要ri块餐巾(i=1, 2,-,N).餐厅可以购买新的餐巾,每块餐巾的费用为p分:或者把旧 ...

  9. 网络流24题 餐巾计划(DCOJ8008)

    题目描述 一个餐厅在相继的 n nn 天里,每天需用的餐巾数不尽相同.假设第 i ii 天需要 ri r_ir​i​​ 块餐巾.餐厅可以购买新的餐巾,每块餐巾的费用为 P PP 分:或者把旧餐巾送到快 ...

  10. [codevs 1237] 餐巾计划问题

    http://codevs.cn/problem/1237/ 题解: 引用<24题>: 把每天分为二分图两个集合中的顶点Xi,Yi,建立附加源S汇T. 1.从S向每个Xi连一条容量为ri, ...

最新文章

  1. 面试题-自旋锁,以及jvm对synchronized的优化
  2. 与女儿谈商业模式 (3):沃尔玛的成功模式
  3. SQL Server 2005 和JBOSS 4 系统运行缓慢--高并发系统探讨(1)
  4. el-tree 权限 勾选_一周新债总结,最高涨30%,10月26日起可转债交易需要先开权限...
  5. esp32原理图设计_第十一章 ESP32的PWM全彩LED灯显示
  6. 博客园自动添加版权说明,自动添加文章链接
  7. P3273-[SCOI2011]棘手的操作【线段树,并查集】
  8. hibernate+struts2整合jar包冲突
  9. Java反射机制API
  10. etcd部署简单说明
  11. “+=”和append的区别
  12. 4个月掌握核心技术 成为云计算行业专家
  13. Java根据城市拼音首字母排序并进行分组
  14. VTN416多通道振弦采集仪多功能
  15. 计算机 键盘启动,键盘开机如何打开键盘
  16. JAVA毕业设计淮安城市开放大学实习实训管理系统计算机源码+lw文档+系统+调试部署+数据库
  17. Pdf.js 解决电子印章问题
  18. noi题库c语言 1.5答案,NOIP2004提高组复赛试题答案c语言版
  19. Java---Map详解
  20. Android屏幕适配方案

热门文章

  1. Google play上架被拒踩坑系列
  2. 翻译 Scribe : a way to aggregate data and why not, to directly fill the HDFS?
  3. MarkDown 编辑器字体改颜色大小等常用操作
  4. 故障分析 | OceanBase Proxy 无法连接 OBserver 集群
  5. 成绩排序(一)c++
  6. 云安全技术有什么特点?云安全包含哪些方面?
  7. 备战金九银十!2022Java面试必刷461道大厂架构面试真题汇总+面经+简历模板都放这了,注意划重点!!
  8. python数据可视化方法和库
  9. Paper Notes: Cross-Domain Image Translation Based on GAN
  10. 网卡基本配置2(主机名修改、网卡绑定)