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 - ...
随机推荐
- MapReduce -- TF-IDF
通过MapReduce实现 TF-IDF值的统计 数据:文章ID 文件内容 今天约了姐妹去逛街吃美食,周末玩得很开心啊! ...... ...... 结果数据: 开心:0.28558719539400 ...
- 微服务 Rpc和Rest协议
原文:https://blog.csdn.net/king866/article/details/54174665 接口调用通常包含两个部分,序列化和通信协议.常见的序列化协议包括json.xml.h ...
- Dynamics CRM2016 导入数据格式之xlsx的应用
在CRM中导入数据中新增加了一个xlsx格式,这个在之前的版本(2013中没有,2015不清楚是否有)中是没有的 本篇的目的就是为了提醒各位,不要把这个格式和csv的导入功能混淆,因为xlsx格式的用 ...
- [计算机视觉] 图像拼接 Image Stitching
[计算机视觉] 图像拼接 Image Stitching 2017年04月28日 14:05:19 阅读数:1027 作业要求: 1.将多张图片合并拼接成一张全景图(看下面效果图) 2.尽量用C/C+ ...
- Flask学习-Flask基础之WSGI
一.WSGI为什么会出现? 在学习一个东西之前,我们肯定想知道:它为什么会出现?那么,WSGI为什么会出现呢? 我们知道,部署一个web应用,经常需要使用nginx.apache或者IIS等web服务 ...
- effective c++ 笔记 (18-22)
//---------------------------15/04/06---------------------------- //#18 让接口容易被正确使用,不易被误用 { // 1:为了防 ...
- 线状地物图斑化全流程作业(使用ArcMap软件)
一.线状地物调整 1.添加全覆盖图斑数据 2.添加线状地物 3.添加地理图斑 4.添加村界 5.剪裁自己村界的线状地物得(地理处理/剪裁(输入要素为线状地物,剪裁要素为村界,输出要素是得到的新层位置) ...
- DevOps on AWS之Cloudformation概念介绍篇
Cloudformation的相关概念 AWS cloudformation是一项典型的(IAC)基础架构即代码服务..通过编写模板对亚马逊云服务的资源进行调用和编排.借助cloudformation ...
- HAOI2017 新型城市化 二分图的最大独立集+最大流+强连通缩点
题目链接(洛谷):https://www.luogu.org/problemnew/show/P3731 题意概述:给出一张二分图,询问删掉哪些边之后可以使这张二分图的最大独立集变大.N<=10 ...
- Python在函数中使用*和**接收元组和列表
http://blog.csdn.net/delphiwcdj/article/details/5746560