bzoj4458 GTY的OJ (优先队列+倍增)
把超级钢琴放到了树上。
这次不用主席树了..本来以为会好写一点没想到细节更多(其实是树上细节多)
为了方便,对每个点把他的那个L,R区间转化成两个深度a,b,表示从[a,b)选一个最小的前缀和(到根的和)减掉
为了更加方便,编号变为2~N+1,然后把2连到1上,1作为一个假根,权值为0
然后倍增去找那个a和b,记一记最小值的位置,然后劈开再加回到优先队列里就行了
#include<bits/stdc++.h>
#define pa pair<int,int>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=5e5+;
const ll inf=1e12; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} struct Node{
int x,l,r,m;ll v;
};
bool operator < (Node a,Node b){return a.v<b.v;}
bool operator > (Node a,Node b){return a.v>b.v;}
int N,M,L,R;
int fa[maxn][],mi[maxn][],dep[maxn];
ll mn[maxn][],v[maxn];
priority_queue<Node> q; inline ll getrmq(int x,int l,int r,int &m){
if(l<=) return -inf;
ll vx=v[x];
for(int i=;i>=;i--){
if(fa[x][i]&&dep[fa[x][i]]>=l)
x=fa[x][i];
}
ll f=inf;
for(int i=;i>=;i--){
if(fa[x][i]&&dep[fa[x][i]]>=r){
if(mn[x][i]<f) f=mn[x][i],m=dep[mi[x][i]];
x=fa[x][i];
}
}
if(dep[x]>r&&mn[x][]<f) f=mn[x][],m=dep[mi[x][]];
// printf("%d %d\n",vx,f);
return vx-f;
} int main(){
//freopen("","r",stdin);
int i,j,k;
N=rd();
for(i=;i<=N+;i++){
fa[i][]=rd()+;
}dep[]=;
for(i=;i<=N+;i++) v[i]=v[fa[i][]]+rd(),dep[i]=dep[fa[i][]]+;
M=rd(),L=rd(),R=rd(); for(i=;i<=N+;i++){
mn[i][]=v[i],mi[i][]=i;
for(j=;fa[i][j]&&fa[fa[i][j]][j];j++){
fa[i][j+]=fa[fa[i][j]][j];
if(mn[i][j]<mn[fa[i][j]][j]) mn[i][j+]=mn[i][j],mi[i][j+]=mi[i][j];
else mn[i][j+]=mn[fa[i][j]][j],mi[i][j+]=mi[fa[i][j]][j];
}
}
for(i=;i<=N+;i++){
Node p;
p.x=i,p.l=dep[i]-L,p.r=dep[i]-R-;
// printf("%d %d %d\n",p.x,p.l,p.r);
if(p.l<=) continue;
p.v=getrmq(p.x,p.l,p.r,p.m);
q.push(p);
}
ll ans=;
for(i=;i<=M;i++){
Node p=q.top();q.pop();
ans+=p.v;
if(p.m<p.l){
Node p1;
p1.x=p.x,p1.l=p.l,p1.r=p.m;
p1.v=getrmq(p1.x,p1.l,p1.r,p1.m);
q.push(p1);
}if(p.r<p.m-){
Node p2;
p2.x=p.x,p2.l=p.m-,p2.r=p.r;
p2.v=getrmq(p2.x,p2.l,p2.r,p2.m);
q.push(p2);
}
}
printf("%lld\n",ans);
return ;
}
bzoj4458 GTY的OJ (优先队列+倍增)的更多相关文章
- 【贪心 计数 倍增】bzoj4458: GTY的OJ
倍增写挂调了半个晚上 Description 身为IOI金牌的gtyzs有自己的一个OJ,名曰GOJ.GOJ上的题目可谓是高质量而又经典,他在他的OJ里面定义了一个树形的分类目录,且两个相同级别的目录 ...
- bzoj4458: GTY的OJ
题目大意:给定一棵带点权的有根树,同时给定L,R,要求找M条链,每条链满足以下条件的情况下,要求所有链权和最大: 1.两两不相同(可以包含/相交等) 2.节点数在[L,R]间 3.其中一个端点的深度必 ...
- 【BZOJ4458】GTY的OJ
题面 Description 身为IOI金牌的gtyzs有自己的一个OJ,名曰GOJ.GOJ上的题目可谓是高质量而又经典,他在他的OJ里面定义了一个树形的分类目录,且两个相同级别的目录是不会重叠的.比 ...
- 【BZOJ4458】GTY的OJ(树上超级钢琴)
点此看题面 大致题意: 给你一棵树,让你求出每一个节点向上的长度在\([l,r]\)范围内的路径权值和最大的\(m\)条路径的权值总和. 关于此题的数列版本 此题的数列版本,就是比较著名的[BZOJ2 ...
- FJUT - OJ优先队列专题题解
题目链接http://120.78.128.11/Contest.jsp?cid=18 题面不贴了 都是英文题,看的我心力憔悴 =7= 一.Ugly Numbers 题目说一个数的质因数只包含2.3或 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 2018.10.29 NOIP2018模拟赛 解题报告
得分: \(70+60+0=130\)(\(T3\)来不及打了,结果爆\(0\)) \(T1\):简单的求和(点此看题面) 原题: [HDU4473]Exam 这道题其实就是上面那题的弱化版,只不过把 ...
- NOIP2018赛前停课集训记(10.24~11.08)
前言 为了不久之后的\(NOIP2018\),我们的停课从今天(\(Oct\ 24th\))起正式开始了. 本来说要下周开始的,没想到竟提早了几天,真是一个惊喜.毕竟明天有语文考试.后天有科学考试,逃 ...
- All Of ACM
数据结构和算法专栏,我会什么写什么 = = 不定时更新 一.数据结构 树状数组详解 线段树详解 二.算法 KMP算法 三.板子 我的代码模板 大整数模板 四.题解报告 几道STL题目(FJUT - ...
随机推荐
- MariaDB数据库性能优化
1. 硬件优化 1.1 内存(Memory) 内存是最重要的因素,因为它允许您调整服务器系统变量.更多的内存意味着可以将更大的密钥和表缓存存储在内存中,从而减少磁盘访问速度,降低一个数量级. 如果未将 ...
- 20155328 《网络对抗》 实验九 Web安全
20155328 <网络对抗> 实验九 Web安全 基础 实验过程记录 在实验开始之前先把webgoat的jar包放到home目录下.打开终端,用命令java -jar webgoat-c ...
- POJ1080
一道字符串DP,然而不需要状压之类的玄学操作 题目大意:给你两个串,由'A','C','G','T'组成,现在你可以在这两个串中的某些位置插入'-',最终要使得它们的长度相等 给出两个字符匹配时的匹配 ...
- EZ 2018 04 01 ZJOI2018模拟赛04.01
现在开始填以前的坑 这次老叶强制我们打一下这次省选题,然后我已经做好了掉Rating到死的准备 然后考完--莫名涨了 Orz 题目链接 由于很多东西我都不会,所以详细请看:dalao的题解 T1 我T ...
- springboot 设置 session 过期时间
application.properties server.session.timeout=86400 #单位(s) 这里是24小时
- pt-online-schema-change的实现原理
pt-online-schema-change用于MySQL的在线DDL. 下面结合官方文档和general log来分析其实现原理. 测试表 mysql> show create table ...
- AngularJS + CoffeeScript 前端开发环境配置详解
AngularJS 号称 '第一框架' ('The first framework') 确实是名不虚传.由其从jQuery中完全转入AngularJS后就有无法离开他的感觉了.虽然AngularJS的 ...
- 基于HTTPS的中间人攻击-BaseProxy
前言 在上一篇文章BaseProxy:异步http/https代理中,我介绍了自己的开源项目BaseProxy,这个项目的初衷其实是为了渗透测试,抓包改包.在知识星球中,有很多朋友问我这个项目的原理及 ...
- Asp.Net_Form验证跟授权
配置文件的<system.web></system.web>结点下添加如下代码: <!--身份验证方式--> <authentication mode=&qu ...
- docker之搭建私有仓库
一.私有仓库 1.防止网络原因:下载慢,访问不到的情况,需要在内网搭建一个私有仓库. 二.仓库镜像下载 [root@node03 ~]# docker pull registry 三.创建私有仓库容器 ...