题目链接:戳我
建图方式比较巧妙的一个题。
首先还是拆点思想,就是对于一个点,我们拆成早上和晚上两种状态。
之后我们考虑怎么建图。
首先我们定义早上状态接收干净餐巾,传出脏餐巾。晚上接收脏餐巾,传出干净餐巾。
1、每天早上可以买任意数量的新餐巾(从源点连到i,容量为INF)
2、每天早上传出需要使用数量的脏餐巾(从点i连到汇点,容量为need[i],费用为0)
3、每天晚上肯定有固定量的餐巾是从干净的变成脏的,相当于接收了固定量的脏餐巾(从源点连到点i+n,容量为need[i],费用为0)
4、每天晚上可以选择慢洗(从点i+n连到洗好的那一天早上)
5、每天晚上可以选择快洗(从点i+n连到洗好的那一天早上)
6、每天晚上可以选择不洗,把脏餐巾留下来(根据定义,我们只能留到晚上状态,所以点i+n向i+n+1连一条边)
然后。。。就没什么啦!
代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define MAXN 100010
#define S 0
#define T 2*n+1
using namespace std;
inline int read()
{int f=1,x=0; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48); ch=getchar();}return x*f;
}
int n,t=1,p,m,ff,nn,s;
int head[MAXN],done[MAXN],pre_v[MAXN],pre_e[MAXN],need[MAXN];
long long c,f;
long long dis[MAXN];
struct Edge{int nxt,to;long long dis,cost;}edge[MAXN];
inline void add(int from,int to,long long dis,long long cost)
{edge[++t].nxt=head[from],edge[t].to=to,edge[t].dis=dis,edge[t].cost=cost,head[from]=t;edge[++t].nxt=head[to],edge[t].to=from,edge[t].dis=0,edge[t].cost=-cost,head[to]=t;
}
inline bool spfa()
{queue<int>q;for(int i=1;i<=2*n+1;i++) dis[i]=(long long)1e18;q.push(S);done[S]=1;dis[S]=0;while(!q.empty()){int u=q.front();q.pop();done[u]=0;for(int i=head[u];i;i=edge[i].nxt){int v=edge[i].to;if(dis[v]>dis[u]+edge[i].cost&&edge[i].dis){dis[v]=dis[u]+edge[i].cost;pre_e[v]=i,pre_v[v]=u;if(!done[v])q.push(v),done[v]=1;}}}if(dis[T]==(long long)1e18) return false;long long flow=(long long)1e18;for(int i=T;i!=S;i=pre_v[i]) flow=min(flow,edge[pre_e[i]].dis);for(int i=T;i!=S;i=pre_v[i]) edge[pre_e[i]].dis-=flow,edge[pre_e[i]^1].dis+=flow;c+=dis[T]*flow;f+=flow;return true;
}
int main()
{#ifndef ONLINE_JUDGEfreopen("ce.in","r",stdin);#endifn=read();for(int i=1;i<=n;i++) need[i]=read();p=read(),m=read(),ff=read(),nn=read(),s=read();for(int i=1;i<=n;i++) add(S,i+n,need[i],0),add(i,T,need[i],0);for(int i=1;i<=n;i++) {   add(S,i,(long long)1e18,p);if(i+1<=n) add(i+n,i+n+1,(long long)1e18,0);if(i+m<=n) add(i+n,i+m,(long long)1e18,ff);if(i+nn<=n) add(i+n,i+nn,(long long)1e18,s);}while(spfa());printf("%lld\n",c);return 0;
}

转载于:https://www.cnblogs.com/fengxunling/p/10296808.html

[网络流24题] 餐巾计划问题相关推荐

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

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

  2. COGS461. [网络流24题] 餐巾

    [问题描述] 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,-,N).餐厅可以从三种途径获得餐巾. (1)购买新的餐巾,每块需p分: (2)把用过的餐巾送到快洗部,洗一块需m天,费用需f分 ...

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

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

  4. Cogs 727. [网络流24题] 太空飞行计划(最大权闭合子图)

    [网络流24题] 太空飞行计划 ★★☆ 输入文件:shuttle.in 输出文件:shuttle.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] W 教授正在为国家航天中心计 ...

  5. LibreOJ #6001. 「网络流 24 题」太空飞行计划 最大权闭合图

    #6001. 「网络流 24 题」太空飞行计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测 ...

  6. 题解 【网络流24题】太空飞行计划

    [网络流24题]太空飞行计划 Description W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,- ...

  7. LOJ6001 - 「网络流 24 题」太空飞行计划

    原题链接 Description 有m(m≤50)个实验和n(n≤50)个仪器,做实验有报酬买仪器有花费.每个实验都需要一些仪器,求最大净收益(实验报酬−仪器花费),并输出一组方案. Solution ...

  8. [网络流24题] No2_太空飞行计划

    727. [网络流24题] 太空飞行计划 ★★☆   输入文件:shuttle.in   输出文件:shuttle.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] W ...

  9. PowerOJ 1737 网络流24题之二 太空飞行计划问题(最大权闭合子图)

    PowerOJ 1737 网络流24题之二 太空飞行计划问题 原题地址: https://www.oj.swust.edu.cn/problem/show/1737 题意: W 教授正在为国家航天中心 ...

最新文章

  1. linux设备驱动第一篇:设备驱动程序简介
  2. linux yum安装mysql5.7_Linux安装MySQL5.7通过yum安装轻松搞定
  3. 重磅推荐 | 11个名企NLP项目,硅谷科学家帮你转型
  4. 18张动图,向你展示难得一见的瞬间
  5. 教你如何进入有密码的 XP 系统(下)
  6. python 重定向到其他cmd_python 如何重定向到另一个终端?
  7. python绘制函数曲线x2sin(x2-x-2)_下面哪几个选项中的语句能够完成用fplot语句来绘制函数y=x^3+2*x^2+sin(x)在区间[-5,5]上的图形。...
  8. 一个正经的前端学习 开源 仓库(阶段十九)
  9. “红山开源”创新论坛 | ChinaOSC
  10. 存储空间不足,无法处理此命令。 (异常来自 HRESULT:0x80070008)
  11. 3种将等高线转DEM的方法
  12. 火遍全网的 ChatGPT,给你的求职新方向
  13. python实现SVG文件解析
  14. 河南省测绘资质单位大全
  15. Python爬虫-Beautiful Soup-当当图书目录(1)
  16. 使用裁切技巧,去除视频上下黑边,保持视频画面不变形播放
  17. 什么是全栈【举例讲解】
  18. 【FFMPEG】vs2019调用FFmpeg动态库教程
  19. lqc_更新系统+弱口令扫描+nmap
  20. Java电子信箱系统的设计与实现

热门文章

  1. Typescript 类型的常用知识与技能
  2. php cms 公众号,thinkwechat
  3. oracle 1亿条数据,如何在十分钟内插入1亿条记录到Oracle数据库?
  4. 360浏览器清除缓存_放飞浏览器的反应速度
  5. AcWing 891. Nim游戏(nim博弈)
  6. 机器人植入情感芯片利与弊_马斯克活猪脑机接口试验成功!多芯片植入,硬币大小,实时读取脑电波,已被批准人脑实验...
  7. c语言求浮点数矩阵的逆程序,逆矩阵求程序!!!谢谢
  8. 转︱机器学习算法线上部署方法
  9. R+python︱XGBoost极端梯度上升以及forecastxgb(预测)+xgboost(回归)双案例解读
  10. 表格识别----基于模板的文字识别结果结构化处理技术