洛谷1251 餐巾计划问题
题目链接:餐巾计划问题
分析:
对于每一天,我们把它拆成两个点,分别代表每一天用完的餐巾\(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 餐巾计划问题相关推荐
- 洛谷P1251 餐巾计划问题 无汇源最小费用流
题目描述 一个餐厅在相继的 NN 天里,每天需用的餐巾数不尽相同.假设第 ii 天需要 r_iri块餐巾( i=1,2,...,N).餐厅可以购买新的餐巾,每块餐巾的费用为 pp 分;或者把旧餐巾送 ...
- 洛谷 - P1251 餐巾计划问题(最小费用最大流+思维建边)
题目链接:点击查看 题目大意:给出n天每天所需要的新餐巾的数量,现在有多种方式可以获得新餐巾,问如何运营能使花费最少: 直接购买,花费为cost 将脏餐巾送到快洗部,需要洗t1天,花费为c1 将脏餐巾 ...
- 洛谷 P1137 旅行计划 题解
洛谷 P1137 旅行计划 题解 洛谷 P1137 题目 小明要去一个国家旅游.这个国家有 N N N个城市,编号为1至 N N N,并且有 M M M条道路连接着,小明准备从其中一个城市出发,并只往 ...
- 洛谷 P1137 旅行计划 1
题目描述 小明要去一个国家旅游.这个国家有N个城市,编号为1-N,并且有M条道路连接着,小明准备从其中一个城市出发,并只往东走到城市i停止. 所以他就需要选择最先到达的城市,并制定一条路线以城市i为终 ...
- 2021寒假——洛谷刷题计划(35题)
(希望大家不要Copy) AC:Accept,程序通过. CE:Compile Error,编译错误. PC:Partially Correct,部分正确. WA:Wrong Answer,答案错误. ...
- 洛谷P2680 运输计划(倍增LCA + 树上差分 + 二分答案)
[题目链接] [思路]: 根据题意可以明显看出,当所有任务都完成时的时间是最终的结果,也就是说本题要求,求出最小的最大值. 那这样的话就暗示了将答案二分,进行check. [check方法]: 如果说 ...
- 洛谷P2680:运输计划(倍增、二分、树上差分)
传送门 文章目录 题目描述 解析 问题 代码 题目描述 解析 求最大值的最小值 容易想到二分 然后...就没有然后了... 看了题解 学会了一个新技能:树上差分 (其实学长之前好像讲过...) 一般的 ...
- 洛谷 1137 旅行计划
[题解] 拓扑排序+DP即可. 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #in ...
- 洛谷 P1137 旅行计划
题目描述 小明要去一个国家旅游.这个国家有N个城市,编号为1-N,并且有M条道路连接着,小明准备从其中一个城市出发,并只往东走到城市i停止. 所以他就需要选择最先到达的城市,并制定一条路线以城市i为终 ...
- 洛谷 2680 运输计划 题解
博客观赏效果更佳 题意简述 n n n个点的边带权树,给 m m m条关键的链.把树上一条边的权值变为0,使得 m m m条链的和中,最大值最小. n , m < = 1 e 5 n,m< ...
最新文章
- 权限表管理之获取用户权限表列表数据
- c语言 free参数 指针,C语言之free函数以及野指针介绍
- 红包规则_“科普闯关100%夺红包”游戏规则升级了!速速来看!
- IDS与IPS的区别
- 在一个大项目中,我选择了另一种JDK实现AdoptOpenJDK
- Jupidator 0.8.0 发布,Java 应用自动更新框架
- Aizu 2224 Save your cats
- 软件常用版本英文snapshot和ga
- 2011-09-07 00:16 ubuntu 如何修改当前用户名
- python 自定义数据类型_【整理合集,建议收藏】Python数据类型(一)
- Hibernate3的jar包
- 将连接数据库的地址写在web.config里面,后台直接调用
- epsonl360打印机连接电脑_epsonl360打印机脱机如何解决
- 一张图看懂财务报表分析
- Centos里tftp服务器的安装和配置
- 矩阵可逆与行列式关系的一个直观推导
- 阿里云域名注册+服务器购买+备案教程
- 【LEDE】树莓派上玩LEDE终极指南-95-Aria2不能下载https的解决方法
- 服务器上线运行正常但不能上网,网线是好的,插笔记本正常上网,插在服务器上却不能上网的解决方法...
- excel内容少却文件很大_(excel内容很少,文件却很大,怎么解决)excel表格数据少但是过大怎么办...
热门文章
- 江苏咪咕MGV3000_YST代工_S905L3_线刷固件包
- 计算机硬件故障检测论文,《浅析计算机硬件故障的判断及维修》-毕业论文(设计).doc...
- 基于pytorch卷积人脸表情识别--毕业设计
- 陶哲轩实分析 5.2 节习题试解
- SAEJ3061汽车信息安全指南文档
- EDA 电子设计自动化VHDL系列课程1--加【减】法器的设计
- mysql 1048_MySQL Error 1048 奇遇记-阿里云开发者社区
- vscode中输入感叹号无法识别html模板
- 英语口语收集(三十七)
- TPM设备管理之设备采购方法及注意事项