题目大意:一个餐厅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]餐巾计划问题的更多相关文章

  1. 洛谷 P1251 餐巾计划问题(线性规划网络优化)【费用流】

    (题外话:心塞...大部分时间都在debug,拆点忘记加N,总边数算错,数据类型标错,字母写错......) 题目链接:https://www.luogu.org/problemnew/show/P1 ...

  2. 洛谷P1251 餐巾计划问题(费用流)

    传送门 不得不说这题真是思路清奇,真是网络流的一道好题,完全没想到网络流的建图还可以这么建 我们把每一个点拆成两个点,分别表示白天和晚上,白天可以得到干净的餐巾(购买的,慢洗的,快洗的),晚上可以得到 ...

  3. 洛谷P1251 餐巾计划问题(最小费用最大流)

    题意 一家餐厅,第$i$天需要$r_i$块餐巾,每天获取餐巾有三种途径 1.以$p$的费用买 2.以$f$的费用送到快洗部,并在$m$天后取出 3.以$s$的费用送到慢洗部,并在$n$天后取出 问满足 ...

  4. 洛谷 P1251 餐巾计划问题【最小费用最大流】

    建图细节比较多,对于每个点i,拆成i和i',i表示用的餐巾,i'表示脏餐巾,连接: (s,i,r[i],p)表示在这一天买新餐巾 (i,t,r[i],0)表示这一天用了r[i]的餐巾 (s,i+n,r ...

  5. 洛谷 P1251 餐巾计划问题

    题目链接 最小费用最大流. 每天拆成两个点,早上和晚上: 晚上可以获得\(r_i\)条脏毛巾,从源点连一条容量为\(r_i\),费用为0的边. 早上要供应\(r_i\)条毛巾,连向汇点一条容量为\(r ...

  6. 洛谷P1251 餐巾(网络流)

    P1251 餐巾 15通过 95提交 题目提供者该用户不存在 标签网络流贪心 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 为什么我全部10个测试点都对… 题目描述 一个餐厅在相继的N天里 ...

  7. 洛谷 [P251] 餐巾计划问题

    有上下界的最小费用最大流 可以联想到供求平衡问题,所以我们要拆点做这道题 把每天分为二分图两个集合中的顶点Xi,Yi,建立附加源S汇T. 1.从S向每个Xi连一条容量为ri,费用为0的有向边. 2.从 ...

  8. 洛谷.1251.餐巾计划问题(费用流SPFA)

    题目链接 /* 每一天的餐巾需求相当于必须遍历某些点若干次 设q[i]为Dayi需求量 (x,y)表示边x容y费 将每个点i拆成i,i',由i'->T连(q[i],0)的边,表示求最大流的话一定 ...

  9. P1251 餐巾计划问题

    P1251 餐巾计划问题 题目描述 一个餐厅在相继的 N 天里,每天需用的餐巾数不尽相同.假设第 iii 天需要 rir_iri​块餐巾( i=1,2,...,N).餐厅可以购买新的餐巾,每块餐巾的费 ...

随机推荐

  1. jquery和vue分别对input输入框手机号码格式化(344)

    jQuery function fomatterTel(val, old) {//val: 当前input的值,old: input上次的值 var str = ""; var t ...

  2. 构造HTTP请求Header实现“伪造来源IP”

    在阅读本文前,大家要有一个概念,在实现正常的TCP/IP 双方通信情况下,是无法伪造来源 IP 的,也就是说,在 TCP/IP 协议中,可以伪造数据包来源 IP ,但这会让发送出去的数据包有去无回,无 ...

  3. Qt on Android 蓝牙通信开发

    版权声明:本文为MULTIBEANS ORG研发跟随文章,未经MLT ORG允许不得转载. 最近做项目,需要开发安卓应用,实现串口的收发,目测CH340G在安卓手机上非常麻烦,而且驱动都是Java版本 ...

  4. (数据科学学习手札25)sklearn中的特征选择相关功能

    一.简介 在现实的机器学习任务中,自变量往往数量众多,且类型可能由连续型(continuou)和离散型(discrete)混杂组成,因此出于节约计算成本.精简模型.增强模型的泛化性能等角度考虑,我们常 ...

  5. 环境变量 - Maven

    Linux 1. 备份并编辑配置文件 # cp /etc/profile /etc/profile.bak # vi /etc/profile 2. 设置Maven环境变量 export MAVEN_ ...

  6. jmeter插件下载

    https://jmeter-plugins.org/wiki/Start/ 插件下载好后,将插件lib目录下的jar包放在jmeter安装目录下的lib里,插件ext目录下的jar包放在jmeter ...

  7. springmvc基础篇—使用注解方式为前台提供数据

    一.新建一个Controller package cn.cfs.springmvc.service; import java.util.ArrayList; import java.util.Hash ...

  8. loadrunner创建测试脚本运行无响应 不记录脚本

    解决一运行User Generator直接程序卡死无响应的办法. (1)“我的电脑”点右键->属性->高级 点选“性能”中的“设置” (2)打开对话框后,进入“数据执行保护”,如果空白框中 ...

  9. 异常处理中try,else,finally含有return的情况解析

    直接看代码,拿到你的py下运行测试一下就 明白了. 例一: def f(): try: print() finally: print() print(f()) # 若注释掉finally内的retur ...

  10. 文本向量化及词袋模型 - NLP学习(3-1)

    分词(Tokenization) - NLP学习(1) N-grams模型.停顿词(stopwords)和标准化处理 - NLP学习(2)   之前我们都了解了如何对文本进行处理:(1)如用NLTK文 ...