摘要:
树链剖分 树链剖分是一种对树的分治, 可以把树上的任意一条链分解为 $O(\log n)$ 条在dfs序上相邻的子链, 便于数据结构(如线段树)来维护. 另外, 子树在dfs序上也是一个连续的区间, 同样可以利用数据结构维护. 重链剖分保证了一些性质: 1. 每个点到根的重链条数为 $O(\log 阅读全文
摘要:
树的重心 "树的其他问题 OI Wiki" 定义 $(1)$ 树的重心 $\leftrightarrow$ 所有的子树中最大的子树节点数最少的节点. $(2)$ 树的重心 $\leftrightarrow$ 所有子树的大小都不超过整个树大小的一半的节点. 性质 删去重心后, 生成的多棵树尽可能平衡. 阅读全文
摘要:
简介 虚树可以解决一些关于树上一部分节点的问题. 对于一棵树 $T$ 的一个子集 $S$, 可以在 $O(|S| \log |S|)$ 的时间复杂度内求出 $S$ 的虚树. 虚树包括根节点, 所有询问点和所有询问点之间的 $lca$. 代码 例题: BZOJ2286 [Sdoi2011]消耗战 建立 阅读全文
摘要:
K D Tree K D Tree可以看作二叉搜索树的高维推广, 它的第 $k$ 层以所有点的第 $k$ 维作为关键字对点做出划分. 为了保证划分均匀, 可以以第 $k$ 维排名在中间的节点为划分节点. 这可以利用 实现. K D Tree 支持单点修改. 为了保证 K D Tree 的平衡性, 可 阅读全文