正题

题目链接:https://www.luogu.com.cn/problem/P6847


题目大意

nnn个点的一棵树上,每个时刻可以割掉一些边,一些节点上有果实表示如果在did_idi​时刻这个点恰好不与111联通,那么就可以获得wiw_iwi​的价值。

1≤n,k≤1051\leq n,k\leq 10^51≤n,k≤105


解题思路

设fx,if_{x,i}fx,i​表示节点xxx在时刻iii之前割掉时的最大权值那么相当与在儿子里面选一个最大的fy,j(j≤i)f_{y,j}(j\leq i)fy,j​(j≤i)合并上来。

这是一个很经典的转移方式,和命运那题一样,直接用线段树合并维护就好了。

时间复杂度O(nlog⁡k)O(n\log k)O(nlogk)


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,线段树合并】相关推荐

  1. [Poi2011]Tree Rotations线段树合并

    整理一下线段树合并的思路,大体是给每个树上节点分配一个根编号建一棵log长的权值线段树,一开始树上只有这个树节点的节点权 merge两个树节点的时候,对于当前合并的值域(例如两棵线段树的表示1到n/2 ...

  2. BZOJ.2212.[POI2011]Tree Rotations(线段树合并)

    题目链接 \(Description\) 给定一棵n个叶子的二叉树,每个叶节点有权值(1<=ai<=n).可以任意的交换两棵子树.问最后顺序遍历树得到的叶子权值序列中,最少的逆序对数是多少 ...

  3. 线段树合并与分裂维护树上最长上升子序列 + 点分治删点 ---- 2021 牛客多校第一场 C - Cut the tree(详解)

    题目大意: 给你一个树,树上每个点都有一个权值valnodeval_{node}valnode​,路径(u,v)(u,v)(u,v) 上所有点按顺序有序序列,令f(u,v)f(u,v)f(u,v)是这 ...

  4. 【九省联考2018】秘密袭击【树形dp】【生成函数】【线段树合并】【多项式插值】

    题意:nnn 个点的带点权的树,点权最大值为 www,求所有连通子图第 kkk 大权值之和模 641236412364123. n,w≤1666n,w\leq 1666n,w≤1666,时限 5s. ...

  5. 【NOI2020】命运【树形dp】【线段树合并】

    题意:给一棵 nnn 个点的树,每条边需要染成黑白两种颜色中的一种.给出 mmm 个条件,每个条件给出 u,vu,vu,v,其中 uuu 是 vvv 的祖先,要求 uuu 到 vvv 的链上至少一条黑 ...

  6. 数据结构之线段树合并——永无乡,Lomsat gelral,Tree Rotations,Tree Rotations Escape Through Leaf

    文章目录 [HNOI2012]永无乡 Lomsat gelral 「POI2011 R2 Day2」旋转树木 Tree Rotations Escape Through Leaf 线段树合并与 fhq ...

  7. BZOJ5419[Noi2018]情报中心——线段树合并+虚树+树形DP

    题目链接: [NOI2018]情报中心 题目大意:给出一棵n个节点的树,边有非负边权,并给出m条链,对于每条链有一个代价,要求选出两条有公共边的链使两条链的并的边权和-两条链的代价和最大. 花了一天的 ...

  8. Codeforces.700E.Cool Slogans(后缀自动机 线段树合并 DP)

    题目链接 \(Description\) 给定一个字符串\(s[1]\).一个字符串序列\(s[\ ]\)满足\(s[i]\)至少在\(s[i-1]\)中出现过两次(\(i\geq 2\)).求最大的 ...

  9. 洛谷P4482 [BJWC2018]Border 的四种求法 字符串,SAM,线段树合并,线段树,树链剖分,DSU on Tree...

    原文链接https://www.cnblogs.com/zhouzhendong/p/LuoguP4482.html 题意 给定一个字符串 S,有 q 次询问,每次给定两个数 L,R ,求 S[L.. ...

最新文章

  1. c# oldb连接_C#使用 OleDbConnection 连接读取Excel
  2. 超过100本的linux免费书籍
  3. 关于子对话框的创建与销毁
  4. 在定义SharePoint列表的SPD数据视图的时候需要注意的问题
  5. Hacker(22)----解除系统中的密码
  6. 改进初学者的PID-测量的比例介绍
  7. 最后解密的两弹元勋,众帅之帅朱光亚
  8. java web的动静分离_如何做前后端动静分离
  9. 前端知识笔记汇总200304
  10. 都快2022年了GraphQL还值得学吗?
  11. 计算机网络:overlay(VLAN,VxLAN)、underlay网络、大二层的介绍
  12. Kendo UI grid 表格数据更新
  13. 为什么黑客都用python-为什么大多数黑客都使用Python!
  14. 6.Exchanger-交换机
  15. 1.4 测试各阶段(单元、集成、系统 、Alpha、Beta、验收)
  16. 算法设计与分析期末复习题
  17. 原生H5+JS文件上传
  18. JavaWeb学习(较全较简)
  19. 微信公众号消息模板——Java
  20. Web Polygraph 安装

热门文章

  1. mySQL微信小程序的div_做一个微信小程序的完整流程
  2. 名片管理系统python详解_名的解释|名的意思|汉典“名”字的基本解释
  3. ajax和spa的区别,在XX团上消费过一次不正规的Spa,现在过来两个月公安局打电话叫我过去...
  4. linux删除第二列为空_Linux之基本文本处理工具(二)
  5. 机器学习之数据预处理——归一化,标准化
  6. java spring 拦截器_Spring MVC拦截器(Interceptor)的配置及使用
  7. typeorm_Nestjs 热更新 + typeorm 配置
  8. Deque(双向队列 c++模版实现 算法导论第三版第十章10.1-5题)
  9. python加载模型包占用内存多大_加载pickle python对象会占用大量内存
  10. word List 15