题目链接

题意:

一家餐厅第 iii 天需要 rir_iri​张餐巾,每天餐巾用完后就会变脏,对于餐巾可以

  1. 买一条新的,费用 p
  2. 送到快洗店,m 天后送回来,费用 f
  3. 送到满洗店,n 天后送回来,费用 s
  4. 把脏餐巾留着到以后再洗

题解:

把每一天拆成两个点——早上和晚上,早上接收新餐巾,晚上接收脏餐巾,可以这样建图

  1. 源点 S —> 第 iii 天早上,流量 INF,费用 p(因为早上可以买无数条)
  2. 第 iii 天早上 —> 汇点 T,流量 r[i],费用 0(表示这一天的结束)
  3. 源点 S —> 第 iii 天晚上,流量 r[i] ,费用 0(晚上收到脏餐巾)
  4. 第 iii 天晚上 —> 第 i+mi+mi+m天早上,流量 INF,费用f(快洗)
  5. 第 iii 天晚上 —> 第 i+ni+ni+n天早上,流量 INF,费用s(慢洗)
  6. 第 iii 天晚上 —> 第 i+1i+1i+1天晚上,流量 INF,费用0(把脏餐巾留到下一天)

对于样例的图就是这样的

#include<iostream>
#include<sstream>
#include<string>
#include<queue>
#include<map>
#include<unordered_map>
#include<set>
#include<vector>
#include<stack>
#include <utility>
#include<list>
#include<bitset>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<iomanip>
#include<time.h>
#include<random>
using namespace std;
#include<ext/pb_ds/priority_queue.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
using namespace __gnu_pbds;
#include<ext/rope>
using namespace __gnu_cxx;#define int long long
#define PI acos(-1.0)
#define eps 1e-9
#define lowbit(a) ((a)&-(a))const int mod = 1e9+7;
int qpow(int a,int b){int ans=1;while(b){if(b&1)ans=(ans*a)%mod;a=(a*a)%mod;b>>=1;}return ans;
}
const int INF = 0x3f3f3f3f;
const int N = 1e6+10;
struct node{int to,next;int cap,cost;
}e[N];
int head[N],cnt=-1,S,T;
void add(int u,int v,int cap,int cost){e[++cnt]={v,head[u],cap,cost}; head[u]=cnt; swap(u,v);e[++cnt]={v,head[u],0,-cost}; head[u]=cnt;
}
int r[2005],p,m,f,n,s,a;
int mincost,maxflow,dis[5005],flw[5005],pre[5005],vis[5005];
bool spfa(){memset(dis,-1,sizeof dis);memset(vis,0,sizeof vis);dis[S]=0,flw[S]=INF,vis[S]=1,pre[S]=-1;queue<int>q;q.push(S);while(!q.empty()){int u=q.front(); q.pop();vis[u]=0;for(int i=head[u];~i;i=e[i].next){int v=e[i].to;if(!e[i].cap)continue;if(!~dis[v]||dis[v]>dis[u]+e[i].cost){dis[v]=dis[u]+e[i].cost;flw[v]=min(flw[u],e[i].cap);pre[v]=i;if(!vis[v])q.push(v),vis[v]=1;}}}return ~dis[T];
}
void update(){for(int i=pre[T];~i;i=pre[e[i^1].to])e[i].cap-=flw[T],e[i^1].cap+=flw[T];maxflow+=flw[T];mincost+=dis[T]*flw[T];
}
#define endl '\n'
signed main(){std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);memset(head,-1,sizeof head);cin>>a; S=2*a+1,T=2*a+2;    //源点S,汇点Tfor(int i=1;i<=a;i++)cin>>r[i];cin>>p>>m>>f>>n>>s;for(int i=1;i<=a;i++){add(S,i+a,r[i],0);             //情况1add(i,T,r[i],0);               //情况2add(S,i,INF,p);                //情况3if(i+m<=a)add(i+a,i+m,INF,f);  //情况4if(i+n<=a)add(i+a,i+n,INF,s);  //情况5if(i+1<=a)add(i+a,i+a+1,INF,0);//情况6}while(spfa())update();//费用流板子cout<<mincost<<endl;
}

餐巾计划问题【网络流24题】相关推荐

  1. 太空飞行计划问题 网络流24题(2/24)

    太空飞行计划问题 题面: W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,-,Em},和进行这些实验需要 ...

  2. 太空飞行计划问题(网络流24题,七)

     太空飞行计划问题 题目分析: 是一道中问题,就不深入的分析了.就是叫你求给你M个实验,N个仪器.每个实验要用到N个仪器中的一些,而每个仪使用每个仪器都要花费一些钱.而完成每个实验会有一定的报酬, ...

  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 教授正在为国家航天中心 ...

  10. 网络流24题之太空飞行计划——最大权闭合子图

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

最新文章

  1. 在Ubuntu中用anaconda快速安装opencv3
  2. mysql之存储引擎的选择
  3. Netbackup 添加策略_报NFS.Skipping
  4. RabbitMQ接触(二)
  5. 数据库——高级匹配条件
  6. python 模型交叉验证法_python – 交叉验证和模型选择
  7. object detection
  8. 《Spring》(一)---- IOC基本概念
  9. 此beta版本目前不接受任何新测试员_ASO行业资讯|苹果官方App测试工具TestFlight
  10. linux内存管理:kmap、vmap、ioremap
  11. linux系统里route -n不起作用,Linux系统中的route解析
  12. Maybe it's time to go away
  13. 将文件夹下所有csv文件转换成所有txt
  14. Linux下oracle数据库备份方案
  15. mysql计算相关系数_用sql实现相关系数的计算
  16. JAVA范例 - Applet小应用程序
  17. Python是如何将“中文”转“拼音”的?
  18. 通过fork来剖析Linux内核的内存管理和进程管理(上)
  19. 两种电子配线架的原理比较
  20. 知道创宇的爬虫面试题

热门文章

  1. html给按钮加颜色代码,HTML按钮上的默认颜色代码
  2. 笔记本电脑插入HDMI外接显示器没有声音问题
  3. Python学习实验报告(1)
  4. 从 API、UI、结构到商业产品设计精髓
  5. 蓝桥 字符串跳步 JAVA
  6. 玩转Linux操作系统常见操作,包括VMware安装,DHCP,DNS,Sendmail,NCSA验证,Apache,反向代理,webalizer,创建oracle用户,赋权,挂载
  7. php rrd 做统计数据,Ganlia采样、统计及RRD记录周期(频次、间隔)的配置和更改...
  8. 将RTSP网络摄像机进行网页和微信直播的方案
  9. C++中的函数原型和函数定义
  10. goolgle版本87.0乱码设置utf-8,附有charset插件