树链剖分总结

树链剖分

….等等等等
这是题目总结,反正就是把各种水题放到一起。

然后数组意义的话,dpt深度,son重儿子,ftr父亲,rnk线段树中编号,size是子树大小,top是重链顶端的结点。


【Bzoj1036】树的统计

比较裸,维护区间和与最大值就好了。


【Bzoj4034】树上操作

也是模板,对于子树只要记一个end[x]就行了。


【Bzoj4396】软件包管理器

安装操作就是将软件包到根全都赋为1,然后输出改变的结点数量。删除操作就是将以软件包为根的子树全部赋为0,并输出修改数量。


【Bzoj2243】染色

注意合并的时候判断接口的颜色,Get的时候也是一样,如果接口颜色一样统计时就要减去1。


【Bzoj2819】Nim

维护区间异或和,把+改为^就好了。Nim的必胜策略是当所有堆石子异或和不为0。


【Bzoj3083】遥远的国度

要考虑一下那个换根的操作,当然不能真的换,要分几种情况讨论。
1.root == x ,询问整棵树,直接输出全集。
2.root不为x的子树,则直接考虑x的整棵子树。
3.root为x的子树(也可能是x的某子树中的结点),则不能考虑x的这棵子树,就直接抹去这一段考虑其补集


【Bzoj3531】旅行

对于每种颜色,放入不同的线段树,但其实整个加起来还是还是n个结点,值得注意的是,这里要使用动态开点,要一步步记录左右儿子的编号,而不能使用2i,2i+1直接去找,而这样建树的话,就可以很方便的查询同颜色的结点了,修改操作啥的把原颜色中的结点改为0,再在现在的颜色中开点就可以了。


【Bzoj3626】LCA

首先发现一个性质,加上depth[LCA(l,r)]可以等价于将根到l加上1,之后查询根到r。扩展到区间的话,设要求结点为z,区间[l,r]。也就是从1加到r后对z的查询值减去1加到l-1对z的查询值。这样的话可以把询问先离线排序,之后树链剖分维护,在标记一下就可以了。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值