树剖学习笔记

一.基本概念
1.树链剖分并不是一个复杂的算法或者数据结构,只是能把一棵树拆成链来处理而已,换一种说法,树链剖分只是xxx数据结构/算法在树上的推广,或者说,树链剖分只是把树hash到了几段连续的区间上。
二 .我说一下自己的理解吧,树链剖分其实并没有那么高端,就一个dfs序就可以解决,之所以分成重链和轻链,是因为这样可以满足两个性质:
性质1:如果(v,u)为轻边,则siz[u] * 2 < siz[v];
性质2:从根到某一点的路径上轻链、重链的个数都不大于logn。
主要用到的是第二个性质:这样可以大量减小时间复杂度;
然后采取一系列看似高端的方式,其实就是选出重链,然后把重链扔到线段树上,每次做线段树上的操作时要注意的是不能直接弄,因为只有重链可以一次性在线段树上查询,轻链是要跳的。
现在我做过的链剖主要有两类题,一类是点上存值,一类是边上存值,边上存值原来我一直弄不好,其实就是给root虚拟一条边,然后线段树查询时不走这一条边就行了。(具体方法就是dfs的u和fa带1,fr带1,建树的时候从1建到n,并且第一次就访问1节点就可以了);
然后就是线段树上操作的时候,如果是对边操作就把经典操作改一点点(经典操作:当链端节点不一样时,就选当前链端节点深度最深的点向上跳,跳过一次重链一次轻链,并且把这个节点更新为链端节点的父节点,等链端节点一样以后,如果当前节点不一样,就再访问一次中间的线段树即可,改动只在最后一部分,因为此时父节点表示的边不在路径上,所以访问线段树时要用较浅点的重链儿子在线段树上的位置(此时它们都在重链上,所以一定是重链儿子)(只有这一个地方需要特殊处理!))就可以了。
三.例题:见博客树剖部分;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值