一天天的为了啥。|

lgh_2009

园龄:1年粉丝:1关注:0

树链剖分 学习笔记

随便写一点。

1. 原理

定义重儿子为子树内子树大小最大的任一个点,重边为重儿子向其父亲连的边,其余为轻边。

根据定义,轻边的父亲的子树大小一定不小于这个点的子树大小的二倍。又可以证出轻边数量是 O(logn) 的。因此可以用线段树维护这个东西。

2. 应用

2.1 dsu

考虑子树算贡献时,每次保留重儿子的贡献。这样的复杂度是 O(nlogn) 的,因为轻边数量是 O(logn) 的。

2.2 lca

考虑两个点跳到同一条重链上,dep 较小的就是 lca。

2.3 套数据结构

首先板子肯定就是用线段树维护一下。

然后就是 CF343D,套个 ODT 板子。

题单:

P7735

P1505

P4315

注意到有些题目可能并不需要树剖,可能可以用树上差分/倍增简单维护。

3. 长链剖分

todo.

本文作者:lgh_2009

本文链接:https://www.cnblogs.com/lgh-blog/p/18130104

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   lgh_2009  阅读(9)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起