题目链接:餐巾计划问题

分析:

对于每一天,我们把它拆成两个点,分别代表每一天用完的餐巾\(x_i\)和每一天需要的纸巾\(y_i\)

接下来就是根据题意建图,首先建立源点\(s\)和汇点\(t\)

由于题目中每一天都需要\(r_i\)张餐巾,我们可以由\(s\)向所有的\(x_i\)连一条容量为\(r_i\),费用为0的边;

再从所有的\(y_i\)向\(t\)连一条容量为\(r_i\),费用为0的边,我们希望这些边在最后没有剩余容量

接下来就是根据题目中对纸巾的处理方式来建图

1、什么都不做——由\(x_i\)向\(x_{i+1}\)连一条容量为\(r_i\),费用为0的边

2、送至快洗店——由\(x_i\)向\(y_{i+m}\)连一条容量为INF,费用为\(f\)的边

3、送至慢洗店——由\(x_i\)向\(y_{i+n}\)连一条容量为INF,费用为\(s\)的边

4、购买——由\(s\)向\(y_i\)连一条容量为INF,费用为\(p\)的边

那么在加入这四种边之后能否使我们先前的所有边跑满呢?

答案是显然的——新加入的边的容量为INF,根据流量平衡,会有在前两种边跑满的情况下后面的边仍未跑满的情况

因此直接费用流即可

#include<iostream>
#include<string.h>
#include<string>
#include<stdio.h>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
using namespace std;
#define int long long
#define maxd 1e18+7
struct node{int to,nxt,cost,flow;
}sq[200200];
int n,r[200050],t1,w1,t2,w2,all=1,head[200050],s,t,p,flow[205000],dis[200050],pre[200050],minc=0;
bool vis[200050];int read()
{int x=0,f=1;char ch=getchar();while ((ch<'0') || (ch>'9')) {if (ch=='-') f=-1;ch=getchar();}while ((ch>='0') && (ch<='9')) {x=x*10+(ch-'0');ch=getchar();}return x*f;
}void add(int u,int v,int f,int w)
{all++;sq[all].to=v;sq[all].nxt=head[u];sq[all].flow=f;sq[all].cost=w;head[u]=all;all++;sq[all].to=u;sq[all].nxt=head[v];sq[all].flow=0;sq[all].cost=-w;head[v]=all;
}void init()
{n=read();int i;s=1;t=2*n+2;for (i=1;i<=n;i++) r[i]=read();p=read();t1=read();w1=read();t2=read();w2=read();for (i=1;i<=n;i++){add(s,i+1,r[i],0);add(i+n+1,t,r[i],0);if (i<n) add(i+1,i+2,maxd,0);if (i+t1<=n) add(i+1,i+n+t1+1,maxd,w1);if (i+t2<=n) add(i+1,i+n+t2+1,maxd,w2);add(s,i+n+1,maxd,p);}
}bool spfa()
{queue<int> q;int i;memset(vis,0,sizeof(vis));memset(flow,0,sizeof(flow));memset(pre,0,sizeof(pre));for (i=1;i<=t;i++) dis[i]=maxd;dis[s]=0;q.push(s);vis[s]=1;flow[s]=maxd;while (!q.empty()){int u=q.front();q.pop();vis[u]=0;for (i=head[u];i;i=sq[i].nxt){int v=sq[i].to;if ((sq[i].flow) && (dis[u]+sq[i].cost<dis[v])){dis[v]=dis[u]+sq[i].cost;pre[v]=i;flow[v]=min(flow[u],sq[i].flow);if (!vis[v]){q.push(v);vis[v]=1;}}}}return (dis[t]!=maxd);
}void update()
{int now=t;minc+=(flow[t]*dis[t]);while (now!=s){int tmp=pre[now];sq[tmp].flow-=flow[t];sq[tmp^1].flow+=flow[t];now=sq[tmp^1].to;}
}void work()
{while (spfa()) update();printf("%lld",minc);
}
signed main()
{init();work();return 0;
}

转载于:https://www.cnblogs.com/encodetalker/p/10127010.html

洛谷1251 餐巾计划问题相关推荐

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

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

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

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

  3. 洛谷 P1137 旅行计划 题解

    洛谷 P1137 旅行计划 题解 洛谷 P1137 题目 小明要去一个国家旅游.这个国家有 N N N个城市,编号为1至 N N N,并且有 M M M条道路连接着,小明准备从其中一个城市出发,并只往 ...

  4. 洛谷 P1137 旅行计划 1

    题目描述 小明要去一个国家旅游.这个国家有N个城市,编号为1-N,并且有M条道路连接着,小明准备从其中一个城市出发,并只往东走到城市i停止. 所以他就需要选择最先到达的城市,并制定一条路线以城市i为终 ...

  5. 2021寒假——洛谷刷题计划(35题)

    (希望大家不要Copy) AC:Accept,程序通过. CE:Compile Error,编译错误. PC:Partially Correct,部分正确. WA:Wrong Answer,答案错误. ...

  6. 洛谷P2680 运输计划(倍增LCA + 树上差分 + 二分答案)

    [题目链接] [思路]: 根据题意可以明显看出,当所有任务都完成时的时间是最终的结果,也就是说本题要求,求出最小的最大值. 那这样的话就暗示了将答案二分,进行check. [check方法]: 如果说 ...

  7. 洛谷P2680:运输计划(倍增、二分、树上差分)

    传送门 文章目录 题目描述 解析 问题 代码 题目描述 解析 求最大值的最小值 容易想到二分 然后...就没有然后了... 看了题解 学会了一个新技能:树上差分 (其实学长之前好像讲过...) 一般的 ...

  8. 洛谷 1137 旅行计划

    [题解] 拓扑排序+DP即可. 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #in ...

  9. 洛谷 P1137 旅行计划

    题目描述 小明要去一个国家旅游.这个国家有N个城市,编号为1-N,并且有M条道路连接着,小明准备从其中一个城市出发,并只往东走到城市i停止. 所以他就需要选择最先到达的城市,并制定一条路线以城市i为终 ...

  10. 洛谷 2680 运输计划 题解

    博客观赏效果更佳 题意简述 n n n个点的边带权树,给 m m m条关键的链.把树上一条边的权值变为0,使得 m m m条链的和中,最大值最小. n , m < = 1 e 5 n,m< ...

最新文章

  1. 权限表管理之获取用户权限表列表数据
  2. c语言 free参数 指针,C语言之free函数以及野指针介绍
  3. 红包规则_“科普闯关100%夺红包”游戏规则升级了!速速来看!
  4. IDS与IPS的区别
  5. 在一个大项目中,我选择了另一种JDK实现AdoptOpenJDK
  6. Jupidator 0.8.0 发布,Java 应用自动更新框架
  7. Aizu 2224 Save your cats
  8. 软件常用版本英文snapshot和ga
  9. 2011-09-07 00:16 ubuntu 如何修改当前用户名
  10. python 自定义数据类型_【整理合集,建议收藏】Python数据类型(一)
  11. Hibernate3的jar包
  12. 将连接数据库的地址写在web.config里面,后台直接调用
  13. epsonl360打印机连接电脑_epsonl360打印机脱机如何解决
  14. 一张图看懂财务报表分析
  15. Centos里tftp服务器的安装和配置
  16. 矩阵可逆与行列式关系的一个直观推导
  17. 阿里云域名注册+服务器购买+备案教程
  18. 【LEDE】树莓派上玩LEDE终极指南-95-Aria2不能下载https的解决方法
  19. 服务器上线运行正常但不能上网,网线是好的,插笔记本正常上网,插在服务器上却不能上网的解决方法...
  20. excel内容少却文件很大_(excel内容很少,文件却很大,怎么解决)excel表格数据少但是过大怎么办...

热门文章

  1. 江苏咪咕MGV3000_YST代工_S905L3_线刷固件包
  2. 计算机硬件故障检测论文,《浅析计算机硬件故障的判断及维修》-毕业论文(设计).doc...
  3. 基于pytorch卷积人脸表情识别--毕业设计
  4. 陶哲轩实分析 5.2 节习题试解
  5. SAEJ3061汽车信息安全指南文档
  6. EDA 电子设计自动化VHDL系列课程1--加【减】法器的设计
  7. mysql 1048_MySQL Error 1048 奇遇记-阿里云开发者社区
  8. vscode中输入感叹号无法识别html模板
  9. 英语口语收集(三十七)
  10. TPM设备管理之设备采购方法及注意事项