超级钢琴放到了树上。

这次不用主席树了..本来以为会好写一点没想到细节更多(其实是树上细节多)

为了方便,对每个点把他的那个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 (优先队列+倍增)的更多相关文章

  1. 【贪心 计数 倍增】bzoj4458: GTY的OJ

    倍增写挂调了半个晚上 Description 身为IOI金牌的gtyzs有自己的一个OJ,名曰GOJ.GOJ上的题目可谓是高质量而又经典,他在他的OJ里面定义了一个树形的分类目录,且两个相同级别的目录 ...

  2. bzoj4458: GTY的OJ

    题目大意:给定一棵带点权的有根树,同时给定L,R,要求找M条链,每条链满足以下条件的情况下,要求所有链权和最大: 1.两两不相同(可以包含/相交等) 2.节点数在[L,R]间 3.其中一个端点的深度必 ...

  3. 【BZOJ4458】GTY的OJ

    题面 Description 身为IOI金牌的gtyzs有自己的一个OJ,名曰GOJ.GOJ上的题目可谓是高质量而又经典,他在他的OJ里面定义了一个树形的分类目录,且两个相同级别的目录是不会重叠的.比 ...

  4. 【BZOJ4458】GTY的OJ(树上超级钢琴)

    点此看题面 大致题意: 给你一棵树,让你求出每一个节点向上的长度在\([l,r]\)范围内的路径权值和最大的\(m\)条路径的权值总和. 关于此题的数列版本 此题的数列版本,就是比较著名的[BZOJ2 ...

  5. FJUT - OJ优先队列专题题解

    题目链接http://120.78.128.11/Contest.jsp?cid=18 题面不贴了 都是英文题,看的我心力憔悴 =7= 一.Ugly Numbers 题目说一个数的质因数只包含2.3或 ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. 2018.10.29 NOIP2018模拟赛 解题报告

    得分: \(70+60+0=130\)(\(T3\)来不及打了,结果爆\(0\)) \(T1\):简单的求和(点此看题面) 原题: [HDU4473]Exam 这道题其实就是上面那题的弱化版,只不过把 ...

  8. NOIP2018赛前停课集训记(10.24~11.08)

    前言 为了不久之后的\(NOIP2018\),我们的停课从今天(\(Oct\ 24th\))起正式开始了. 本来说要下周开始的,没想到竟提早了几天,真是一个惊喜.毕竟明天有语文考试.后天有科学考试,逃 ...

  9. All Of ACM

    数据结构和算法专栏,我会什么写什么  = = 不定时更新 一.数据结构 树状数组详解 线段树详解 二.算法 KMP算法 三.板子 我的代码模板 大整数模板 四.题解报告 几道STL题目(FJUT - ...

随机推荐

  1. 20155211 网络攻防技术 Exp08 Web基础

    20155211 网络攻防技术 Exp08 Web基础 实践内容 Web前端HTML,能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. We ...

  2. 20155218《网络对抗》Exp2 后门原理与实践

    20155218<网络对抗>Exp2 后门原理与实践 常用后门工具实践 1.Windows获得Linux Shell: 在Windows下,先使用ipconfig指令查看本机IP,使用nc ...

  3. PYQT5实现控制台显示功能

    首先,写一个信号,用来发射标准输出作为信号 class EmittingStream(QtCore.QObject): textWritten = QtCore.pyqtSignal(str) #定义 ...

  4. VS编程,编辑WPF过程中,点击设计器中界面某一控件,在XAML中高亮突出显示相应的控件代码的设置方法。

    原文:VS编程,编辑WPF过程中,点击设计器中界面某一控件,在XAML中高亮突出显示相应的控件代码的设置方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net ...

  5. redis见解

    http://blog.csdn.net/zhiguozhu/article/details/50517527Redis原生session与redis中的session区别原生session在服务器上 ...

  6. 从零系列--开发npm包(一)

    一.目的 主要是纪录和回顾自己开发的一些步骤以及遇到的一些问题和解决方案 二.准备工作 1.IDE 选择 VS Code 2.安装node 环境 (https://nodejs.org/zh-cn/) ...

  7. C++ string 类详解

    字符串是存储在内存的连续字节中的一系列字符.C++ 处理字符串的方式有两种,一种来自 C 语言,常被称为 C-风格字符串,另一种是基于 string 类库的字符串处理方式.C 风格字符串的处理可以参考 ...

  8. tomcat运行JSP时产生的错误:”javax.servlet.servletexception: java.lang.nosuchmethoderror”

    这个错误其实是多次重复编译JAVA文件导致的,需要clean操作,简单的来说就是删除tomcat下work文件夹中工作空间,也可以理解为自己的虚拟路径,比如我运行的jsp的路径:localhost:8 ...

  9. Todo&Rocket

    Todo是怎么实现的? 前面两篇博客分别介绍了MVC和Backbone.js的逻辑,但是实战获真知,在来一篇来显示下Todo是怎么通过Backbone.js连接起来的. 忽略掉所有的代码,我们只是打开 ...

  10. 第二个Sprint冲刺总结

    第二个Sprint冲刺总结 ( 1)团队Github: https://github.com/ouqifeng/EasyGoOperation.git ( 2 ) 团队贡献分: 廖焯燊:22 何武鹏: ...