bzoj 4842: [Neerc2016]Delight for a Cat
Description
Input
Output
#include<cstdio>
#include<queue>
typedef long long i64;
const int N=;
const i64 inf=1ll<<;
int n,k,L,R,as[N],bs[N];
int S,T,es[N],enx[N],ev[N],ec[N],e0[N],ep=,pe[N];
i64 l[N],ans=;
bool in[N];
std::queue<int>q;
void ae(int a,int b,int v,int c){
if(!v)return;
es[ep]=b;enx[ep]=e0[a];ev[ep]=v;ec[ep]=c;e0[a]=ep++;
es[ep]=a;enx[ep]=e0[b];ev[ep]=;ec[ep]=-c;e0[b]=ep++;
}
void mins(int&a,int b){if(a>b)a=b;}
bool sp(){
for(int i=;i<=T;++i)l[i]=-inf;
l[S]=;
q.push(S);
while(q.size()){
int w=q.front();q.pop();
for(int i=e0[w];i;i=enx[i])if(ev[i]){
int u=es[i];
if(l[u]<l[w]+ec[i]){
l[u]=l[w]+ec[i];
pe[u]=i;
if(!in[u])in[u]=,q.push(u);
}
}
in[w]=;
}
if(l[T]>-inf){
int f=;
for(int w=T,e;w!=S;w=es[e^]){
e=pe[w];
mins(f,ev[e]);
}
for(int w=T,e;w!=S;w=es[e^]){
e=pe[w];
ev[e]-=f;
ev[e^]+=f;
}
ans+=l[T]*f;
return ;
}
return ;
}
int ee[N];
int main(){
scanf("%d%d%d%d",&n,&k,&L,&R);
R=k-R;
for(int i=;i<=n;++i)scanf("%d",as+i);
for(int i=;i<=n;++i)scanf("%d",bs+i);
S=n-k+;T=S+;
for(int i=;i<=n-k+;++i)ae(i,i+,R-L,);
ae(,T,L,);
ae(S,n-k+,L,);
for(int i=;i<=n;++i){
ans+=bs[i];
int x=i-k+,y=i+;
if(x<)x=;
mins(y,n-k+);
int c=as[i]-bs[i];
if(c<=)ee[i]=ep,ae(y,x,,c);
else{
ae(y,T,,);
ae(S,x,,c);
ee[i]=ep;
ae(x,y,,-c);
}
}
while(sp());
printf("%lld\n",ans);
for(int i=;i<=n;++i){
int c=as[i]-bs[i];
putchar((c<=)==(!ev[ee[i]])?'S':'E');
}
return ;
}
bzoj 4842: [Neerc2016]Delight for a Cat的更多相关文章
- BZOJ.4842.[NEERC2016]Delight for a Cat(费用流)
BZOJ 参考这儿. 首先如果一个活动的时间满足条件,那么另一个活动也一定满足.还有就是这题就是费用流没有为什么.不妨假设最初所有时间都用来睡觉,那么我们要对每个\(k\)大小区间选出\([t2,k- ...
- bzoj 4842 [Neerc2016]Delight for a Cat 最小费用最大流,线性规划
题意:有n个小时,对于第i个小时,睡觉的愉悦值为si,打隔膜的愉悦值为ei,同时对于任意一段连续的k小时,必须至少有t1时间在睡觉,t2时间在打隔膜.如果要获得的愉悦值尽 量大,求最大的愉悦值和睡觉还 ...
- bzoj 4842: [Neerc2016]Delight for a Cat【最小费用最大流】
考试题搞了好久也没懂-- 正解应该是线性规划 https://www.cnblogs.com/CQzhangyu/p/7894559.html 可是不会写啊 如果从网络流的角度来体会大概是这样 htt ...
- 【BZOJ4842】[Neerc2016]Delight for a Cat 线性规划+费用流
[BZOJ4842][Neerc2016]Delight for a Cat Description ls是一个特别堕落的小朋友,对于n个连续的小时,他将要么睡觉要么打隔膜,一个小时内他不能既睡觉也打 ...
- [bzoj4842][bzoj1283][Neerc2016]Delight for a Cat/序列_线性规划_费用流
4842: [Neerc2016]Delight for a Cat_1283: 序列 题目大意:ls是一个特别堕落的小朋友,对于n个连续的小时,他将要么睡觉要么打隔膜,一个小时内他不能既睡觉也打隔膜 ...
- 题解-bzoj1283序列 & bzoj4842 [Neerc2016]Delight for a Cat
因为这两题有递进关系,所以放一起写 Problem bzoj1283 序列 题意概要:一个长度为 \(n\) 的序列\(\{c_i\}\),求一个子集,使得原序列中任意长度为 \(m\) 的子串中被选 ...
- bzoj4842: [Neerc2016]Delight for a Cat
bzoj4842 这是一道网络流的题(大家都看出来了吧) 首先我们简化一下题目,选出最关键的部分(就是知道什么和要求什么,还有条件) 我们在这里把睡觉设为0,至少有t0时间在睡觉,把打隔膜设为1,至少 ...
- 【bzoj4842】[Neerc2016]Delight for a Cat 线性规划与网络流
题目描述 $n$ 个连续的位置,每个位置可以填入 S 和 E ,第 $i$ 个位置填入 S 可以获得 $s_i$ 的收益,填入 E 可以获得 $e_i$ 的收益.要求每连续的 $k$ 个位置必须包含至 ...
- 【xsy2115】Delight for a Cat
Time Limit: 1000 ms Memory Limit: 512 MB Description 从前,有一只懒猫叫CJB.每个小时,这只猫要么在睡觉,要么在吃东西,但不能一边睡觉一边吃东 ...
随机推荐
- 关于如何使用cg中的discard/clip
Pass { ZTest Always Cull Off ZWrite Off Fog { Mode off } Blend Off CGPROGRAM #pragma vertex vert_img ...
- ansible role[初稿]
ansible roles role_name/ files/:存储由copy或script等模块调用的文件: tasks/:此目录中至少应该有一个名为main.yml的文件,用于定义各task:其它 ...
- foreach的使用原理简单解析
数组可以foreach遍历,这个是在jdk1.5之前就可以的,我也不太清楚是怎么做到的. 后面的List,Set等的foreach都是实现Iterable接口,基于iterator()对象实现的.Fo ...
- JDBC事务控制管理(转载)
JDBC事务控制管理 转载于 2018年01月26日 15:46:11 1.事务 (1)事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 例如:A——B转帐, ...
- html 目录结构
"D:\phpStudy\WWW\tubiao\libchart\libchart\classes\view\chart/../../../images/PoweredBy.png" ...
- xcode cocos2dx升级
原文转自:http://www.codeo4.cn/archives/690 cocos2d-x的安装脚本里没有升级的脚本,我们如果在新版本安装的时候加上参数:-f 强制安装也没有能完全解决问题.新建 ...
- Windows Security Login
/********************************************************************************* * Windows Securit ...
- 程序运行时间c++/matlab
前言 一般在调试程序的过程中,需要查看代码运行速度的快慢,此时则需要计算代码的运行时间. 实验过程: c++: #include<iostream> #include<time.h& ...
- Unity 3D开发-C#脚本语言的一些基础用法
Unity 中C#语言的一些基础用法 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Lerp -- 线 ...
- Crazy Computer
ZS the Coder is coding on a crazy computer. If you don't type in a word for a cconsecutive seconds, ...