P6847-[CEOI2019]Magic Tree【dp,线段树合并】
正题
题目链接:https://www.luogu.com.cn/problem/P6847
题目大意
\(n\)个点的一棵树上,每个时刻可以割掉一些边,一些节点上有果实表示如果在\(d_i\)时刻这个点恰好不与\(1\)联通,那么就可以获得\(w_i\)的价值。
\(1\leq n,k\leq 10^5\)
解题思路
设\(f_{x,i}\)表示节点\(x\)在时刻\(i\)之前割掉时的最大权值那么相当与在儿子里面选一个最大的\(f_{y,j}(j\leq i)\)合并上来。
这是一个很经典的转移方式,和命运那题一样,直接用线段树合并维护就好了。
时间复杂度\(O(n\log k)\)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e5+10;
ll n,m,k,rt[N],fa[N],d[N],w[N];
ll cnt,t[N<<5],lazy[N<<5],ls[N<<5],rs[N<<5];
void Downdata(int x){
if(!lazy[x])return;
if(ls[x])lazy[ls[x]]+=lazy[x],t[ls[x]]+=lazy[x];
if(rs[x])lazy[rs[x]]+=lazy[x],t[rs[x]]+=lazy[x];
lazy[x]=0;return;
}
void Change(ll &x,ll L,ll R,ll pos,ll val,ll z){
if(!x)x=++cnt;
if(L==R){t[x]=val+max(z,t[x]);return;}
ll mid=(L+R)>>1;Downdata(x);
if(pos<=mid)Change(ls[x],L,mid,pos,val,z);
else Change(rs[x],mid+1,R,pos,val,max(z,t[ls[x]]));
t[x]=max(t[ls[x]],t[rs[x]]);
return;
}
ll Merge(ll L,ll R,ll x,ll y,ll mx1,ll mx2){
if(!x||!y){
if(x)lazy[x]+=mx2,t[x]+=mx2;
if(y)lazy[y]+=mx1,t[y]+=mx1;
return x|y;
}
if(L==R){t[x]=max(t[x],mx1)+max(t[y],mx2);return x;}
ll mid=(L+R)>>1;Downdata(x);Downdata(y);
rs[x]=Merge(mid+1,R,rs[x],rs[y],max(mx1,t[ls[x]]),max(mx2,t[ls[y]]));
ls[x]=Merge(L,mid,ls[x],ls[y],mx1,mx2);
t[x]=max(t[ls[x]],t[rs[x]]);
return x;
}
signed main()
{
scanf("%lld%lld%lld",&n,&m,&k);
for(ll i=2;i<=n;i++)
scanf("%lld",&fa[i]);
for(ll i=1;i<=m;i++){
ll x;scanf("%lld",&x);
scanf("%lld%lld",&d[x],&w[x]);
}
for(ll x=n;x>=1;x--){
if(d[x])Change(rt[x],1,k,d[x],w[x],0);
if(fa[x])rt[fa[x]]=Merge(1,k,rt[fa[x]],rt[x],0,0);
}
printf("%lld\n",t[rt[1]]);
return 0;
}
P6847-[CEOI2019]Magic Tree【dp,线段树合并】的更多相关文章
- BZOJ_2212_[Poi2011]Tree Rotations_线段树合并
BZOJ_2212_[Poi2011]Tree Rotations_线段树合并 Description Byteasar the gardener is growing a rare tree cal ...
- 【pkuwc2018】 【loj2537】 Minmax DP+线段树合并
今年年初的时候参加了PKUWC,结果当时这一题想了快$2h$都没有想出来.... 哇我太菜啦.... 昨天突然去搜了下哪里有题,发现$loj$上有于是就去做了下. 结果第一题我5分钟就把所有细节都想好 ...
- 【BZOJ2212】[Poi2011]Tree Rotations 线段树合并
[BZOJ2212][Poi2011]Tree Rotations Description Byteasar the gardener is growing a rare tree called Ro ...
- [BZOJ5461][LOJ#2537[PKUWC2018]Minimax(概率DP+线段树合并)
还是没有弄清楚线段树合并的时间复杂度是怎么保证的,就当是$O(m\log n)$吧. 这题有一个显然的DP,dp[i][j]表示节点i的值为j的概率,转移时维护前缀后缀和,将4项加起来就好了. 这个感 ...
- bzoj2212[Poi2011]Tree Rotations [线段树合并]
题面 bzoj ans = 两子树ans + min(左子在前逆序对数, 右子在前逆序对数) 线段树合并 #include <cstdio> #include <cstdlib> ...
- BZOJ2212 [Poi2011]Tree Rotations 线段树合并 逆序对
原文链接http://www.cnblogs.com/zhouzhendong/p/8079786.html 题目传送门 - BZOJ2212 题意概括 给一棵n(1≤n≤200000个叶子的二叉树, ...
- BZOJ.5461.[PKUWC2018]Minimax(DP 线段树合并)
BZOJ LOJ 令\(f[i][j]\)表示以\(i\)为根的子树,权值\(j\)作为根节点的概率. 设\(i\)的两棵子树分别为\(x,y\),记\(p_a\)表示\(f[x][a]\),\(p_ ...
- BZOJ.2212.[POI2011]Tree Rotations(线段树合并)
题目链接 \(Description\) 给定一棵n个叶子的二叉树,每个叶节点有权值(1<=ai<=n).可以任意的交换两棵子树.问最后顺序遍历树得到的叶子权值序列中,最少的逆序对数是多少 ...
- LOJ2537. 「PKUWC2018」Minimax【概率DP+线段树合并】
LINK 思路 首先暴力\(n^2\)是很好想的,就是把当前节点概率按照权值大小做前缀和和后缀和然后对于每一个值直接在另一个子树里面算出贡献和就可以了,注意乘上选最大的概率是小于当前权值的部分,选最小 ...
随机推荐
- @Profile-根据不同环境注入bean
介绍 @Profile元注解是在不同的生产环境中,@Bean创建的SpringBean根据spring.profiles.active指定的环境不同创建不同环境的bean对象 一.@Profile元注 ...
- CentOS7 安装Oracle19c数据库RPM包安装
我前两天发了安装oracle12c的方法,但是我虽然在虚拟机试验成功了,正式服务器安装的时候发现还是不行,安装页面卡空白,也没有解决办法,所以我就放弃了界面安装找命令行安装的办法,找了一些之后发现都比 ...
- C# 调用DOS 命令
class NetWorkDeviceInfo { public static string GetDeviceInfo() { System.Diagnostics.Process p = new ...
- QT 中的QTableWidget
- 使用Hugo和GitHub搭建博客
折腾了几天博客的框架终于搭建起来了.研究了一番之后,最终还是选择使用Hugo和GitHub来搭建博客.本文介绍了如何使用Hugo来搭建静态博客网站,并将其部署在GitHub上.使用https://&l ...
- YOLO V3 原理
基本思想V1: 将输入图像分成S*S个格子,每隔格子负责预测中心在此格子中的物体. 每个格子预测B个bounding box及其置信度(confidence score),以及C个类别概率. bbox ...
- css写法
id选择器 > 类选择器 > 标签选择器 @charset "utf-8"; charset=utf-8 表示当前文档的字符集是采用utf-8的字符,也就是我们常说 ...
- Linux centos7 复制,移动,删除文件或文件夹
2021-08-121. 文件(文件夹)复制命令 # 命令格式 cp [-adfilprsu] 源文件(source) 目标文件(destination) cp [option] source1 so ...
- proto buffer
protobuf是一种高效的数据格式,平台无关.语言无关.可扩展,可用于 RPC 系统和持续数据存储系统. protobuf介绍 Protobuf是Protocol Buffer的简称,它是Googl ...
- vue+Element-ui 的 el-cascader 做高德地图的省市区三级联动并且是异步加载,点击省市区跳转到对应的区(地图可以通过后端返回的点进行标点)
// 完整版高德地图,可以复制代码直接使用 index.html <script type="text/javascript" src="https://webap ...