[洛谷P1251]餐巾计划问题
题目大意:一个餐厅N天,每天需要$r_i$块餐巾。每块餐巾需要p元,每天用过的餐巾变脏,不能直接用。现在有快洗店和慢洗店,快洗店洗餐巾需要m天,每块花费f元;慢洗店洗餐巾需要n天,每块餐巾s元(m < n,s< f)。现要求最新的花费使满足每天所需。
题解:把每天拆点,变成上午和下午,进行连边,跑费用流
卡点:现TLE60
C++ Code:
#include<cstdio>
#include<cctype>
#include<cstring>
#define maxn 4010
using namespace std;
const long long inf=0x3f3f3f3f3f3f3f3f;
int n,t1,t2;
long long d[maxn],a,m,m1,m2;
int q[maxn],h,t,pre[maxn];
int st=1,ed;
int head[maxn],cnt=2;
bool vis[maxn];
struct Edge{
int to,nxt;
long long w,cost;
}e[maxn*1000];
char ch;
void read(int &x){
ch=getchar();
while (!isdigit(ch))ch=getchar();
for (x=ch^48,ch=getchar();isdigit(ch);ch=getchar())x=x*10+(ch^48);
}
void readLL(long long &x){
ch=getchar();
while (!isdigit(ch))ch=getchar();
for (x=ch^48,ch=getchar();isdigit(ch);ch=getchar())x=x*10+(ch^48);
}
inline long long min(long long a,long long b){return a<b?a:b;}
void add(int a,int b,long long c,long long d){
e[cnt]=(Edge){b,head[a],c,d};head[a]=cnt;
e[cnt^1]=(Edge){a,head[b],0,-d};head[b]=cnt^1;
cnt+=2;
}
bool spfa(){
int x;
memset(d,0x3f,sizeof d);
d[q[h=t=1]=st]=0;
while (h<=t){
vis[x=q[h++]]=false;
for (int i=head[x];i;i=e[i].nxt){
int to=e[i].to;
if (e[i].w&&d[to]>d[x]+e[i].cost){
d[to]=d[x]+e[i].cost;
pre[to]=i;
if (!vis[to])vis[q[++t]=to]=true;
}
}
}
// printf("%lld\n",d[ed]);
return d[ed]!=inf;
}
long long update(){
long long ans,mf=inf;
for (int i=pre[ed];i;i=pre[e[i^1].to])mf=min(mf,e[i].w);
ans=mf*d[ed];
for (int i=pre[ed];i;i=pre[e[i^1].to])e[i].w-=mf,e[i^1].w+=mf;
return ans;
}
void MCMF(){
long long ans=0;
while (spfa())ans+=update();
printf("%lld\n",ans);
}
int main(){
read(n);
// printf("%lld\n",inf);
ed=n+1<<1;
for (int i=1;i<=n;i++)readLL(a),add(st,i+1,a,0),add(i+n+1,ed,a,0);
readLL(m),read(t1),readLL(m1),read(t2),readLL(m2);
for(int i=1;i<=n;i++){
if(i+1<=n)add(i+1,i+2,inf,0);
if(i+t1<=n)add(i+1,i+n+t1+1,inf,m1);
if(i+t2<=n)add(i+1,i+n+t2+1,inf,m2);
add(st,i+n+1,inf,m);
}
MCMF();
return 0;
}
[洛谷P1251]餐巾计划问题的更多相关文章
- 洛谷 P1251 餐巾计划问题(线性规划网络优化)【费用流】
(题外话:心塞...大部分时间都在debug,拆点忘记加N,总边数算错,数据类型标错,字母写错......) 题目链接:https://www.luogu.org/problemnew/show/P1 ...
- 洛谷P1251 餐巾计划问题(费用流)
传送门 不得不说这题真是思路清奇,真是网络流的一道好题,完全没想到网络流的建图还可以这么建 我们把每一个点拆成两个点,分别表示白天和晚上,白天可以得到干净的餐巾(购买的,慢洗的,快洗的),晚上可以得到 ...
- 洛谷P1251 餐巾计划问题(最小费用最大流)
题意 一家餐厅,第$i$天需要$r_i$块餐巾,每天获取餐巾有三种途径 1.以$p$的费用买 2.以$f$的费用送到快洗部,并在$m$天后取出 3.以$s$的费用送到慢洗部,并在$n$天后取出 问满足 ...
- 洛谷 P1251 餐巾计划问题【最小费用最大流】
建图细节比较多,对于每个点i,拆成i和i',i表示用的餐巾,i'表示脏餐巾,连接: (s,i,r[i],p)表示在这一天买新餐巾 (i,t,r[i],0)表示这一天用了r[i]的餐巾 (s,i+n,r ...
- 洛谷 P1251 餐巾计划问题
题目链接 最小费用最大流. 每天拆成两个点,早上和晚上: 晚上可以获得\(r_i\)条脏毛巾,从源点连一条容量为\(r_i\),费用为0的边. 早上要供应\(r_i\)条毛巾,连向汇点一条容量为\(r ...
- 洛谷P1251 餐巾(网络流)
P1251 餐巾 15通过 95提交 题目提供者该用户不存在 标签网络流贪心 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 为什么我全部10个测试点都对… 题目描述 一个餐厅在相继的N天里 ...
- 洛谷 [P251] 餐巾计划问题
有上下界的最小费用最大流 可以联想到供求平衡问题,所以我们要拆点做这道题 把每天分为二分图两个集合中的顶点Xi,Yi,建立附加源S汇T. 1.从S向每个Xi连一条容量为ri,费用为0的有向边. 2.从 ...
- 洛谷.1251.餐巾计划问题(费用流SPFA)
题目链接 /* 每一天的餐巾需求相当于必须遍历某些点若干次 设q[i]为Dayi需求量 (x,y)表示边x容y费 将每个点i拆成i,i',由i'->T连(q[i],0)的边,表示求最大流的话一定 ...
- P1251 餐巾计划问题
P1251 餐巾计划问题 题目描述 一个餐厅在相继的 N 天里,每天需用的餐巾数不尽相同.假设第 iii 天需要 rir_iri块餐巾( i=1,2,...,N).餐厅可以购买新的餐巾,每块餐巾的费 ...
随机推荐
- 【poe设备加电配置】
开启接口的poe功能: [interface_name]: 配置poe端口的最大功率: [interface_name[: 配置poe的端口工作模式: [interface_name[: 配置poe端 ...
- Python学习 :深浅拷贝
深浅拷贝 一.浅拷贝 只拷贝第一层数据(不可变的数据类型),并创建新的内存空间进行储蓄,例如:字符串.整型.布尔 除了字符串以及整型,复杂的数据类型都使用一个共享的内存空间,例如:列表 列表使用的是同 ...
- py3.7.1下pyinstaller 的安装及打包 坑
实在无语了,写了个小程序,用pyinstaller打包,运行就出现这个pip install pywin32-ctypes.明明全部都已经安装了啊. 解决办法: 不要在工程设置里安装pyinstall ...
- python2.7练习小例子(十五)
15):题目:输出指定格式的日期. 程序分析:使用 datetime 模块. 程序源代码: #!/usr/bin/python # -*- coding: UTF-8 -*- ...
- LeetCode:11. ContainerWithWater(Medium)
原题链接:https://leetcode.com/problems/container-with-most-water/description/ 题目要求:给定n个非负整数a1,a2,...,an ...
- Github上的1000多本免费电子书重磅来袭!
Github上的1000多本免费电子书重磅来袭! 以前 StackOverFlow 也给出了一个免费电子书列表,现在在Github上可以看到时刻保持更新的列表了. 瞥一眼下面的书籍分类目录,你就能 ...
- ubuntu apt-get 使用代理设置,坑爹。。
网上流传的export http_proxy=http://yourproxyaddress:proxyport是行不通的,虽然改了之后wget一类的可以用.当然去改.bashrc也不会有效果. 真正 ...
- Bootstrap开发漂亮的前端界面之实现原理
引:Bootstrap采用的是一个“响应式”设计.响应式Web 设计是一个让用户通过各种尺寸的设备浏览网站获得良好的视觉效果的方法.例如,您先在计算机显示器上浏览一个网站,然后再智能手机上浏览,智能手 ...
- PowerMock简单使用
网上有很多PowerMock的介绍,此处就不再罗列 下面给出一些资源地址以及几篇案例 mockito资源: (1)源码:https://github.com/mockito/mockito power ...
- Python初步
准备在工作之余看看Python的东西 收录一些资料 Python初学者(零基础学习Python.Python入门)常见问题:书籍推荐.资料.社区 http://blog.csdn.net/xiaowa ...