基于 top cluster 理论的树分块算法小记

基于 top cluster 理论的树分块算法小记

0 前置知识

  • 树分块

1 簇(Cluster)

1.1 定义

树簇为树的一个联通子图,至多有两个点与簇外的其他点有边相连,这两个点被称为界点

树簇内不是界点的点被称为内点,显然内点可以有很多个。

两个界点间的路径被称为簇路径

注意簇不一定是一条链,界点不一定是簇的叶子。

1.2 操作

簇有两种合并操作,通过这两种合并方式的合并过程可以得到一个二叉树,这个二叉树即为 Top tree。

由于簇的操作与后面的树分块没有关系,因此这里并不介绍。

2 树分块

2.1 定义

网上的资料都说这种树分块算法基于与 Top tree 有关的 top cluster 理论,但是我到现在都不清楚这个理论到底是什么。

我们希望通过树簇来进行树分块。具体地,这个树分块理论满足以下条件:

  • 对于给定的 \(n\)\(B\),将树划分成 \(O(\frac{n}{B})\) 个簇,每个簇的大小平均为 \(O(B)\)

  • 不同簇的边集不相交。

  • 如果一个簇有两个界点,则它们为祖孙关系。其中深度浅的称为上界点,深度深的称为下界点。

  • 除了界点外,一个簇中的其他点(即内点)不会在其它簇中出现。

  • 一个界点会是一个簇的下界点,也是其它包含它的簇的上界点。(根节点除外,根节点只会是上界点)

通过保留所有界点,将每个簇看作一条边,得到的一棵新树称之为收缩树

这种分块算法是基于对边进行分块,因此下文中的各种对象也都是针对边的。当然可以简单地由边转化到点。

2.2 算法流程

2.2.1 界点的选取

任选一个节点作为根节点,并强制根节点作为界点(为了防止各种 corner case)。

posted @ 2025-04-06 20:34  Lyz09  阅读(12)  评论(0)    收藏  举报