摘要: 公共祖先: 在一棵有根树上,若节点 \(F\) 是节点 \(x\) 的祖先,也是节点 \(y\) 的祖先,那么称 \(F\) 是 \(x\) 和 \(y\) 的公共祖先。 最近公共祖先(LCA): 在 \(x\) 和 \(y\) 的所有公共祖先中,深度最大的称为最近公共祖先,记为 \(LCA(x,y 阅读全文
posted @ 2024-06-10 08:32 RonChen 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 树状数组(Binary Indexed Tree,BIT)是一种用于维护 \(n\) 个元素的前缀信息的数据结构。 以前缀和为例,对于数列 \(a\),可以将其存储为前缀和数组 \(s\) 的形式,其中 \(s_i = \sum \limits_{j=1}^i a_j\)。那么通过前缀和数组,就可以 阅读全文
posted @ 2024-06-10 08:31 RonChen 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 树上前缀和 设 \(sum_i\) 表示根节点到节点 \(i\) 的权值总和。 则有: 对于点权,\(x,y\) 路径上的和为 \(sum_x + sum_y - sum_{lca} - sum_{fa_{lca}}\)。 对于边权,\(x,y\) 路径上的和为 \(sum_x + sum_y - 阅读全文
posted @ 2024-06-10 08:25 RonChen 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 倍增法与二分法是“相反”的算法,二分法是每次缩小一半,从而以 \(O(\log n)\) 的速度快速缩小定位到解;倍增法是每次扩大一倍,从而以 \(O(2^n)\) 的速度快速地扩展到解空间。 倍增就是“成倍增长”,很多时候倍增的实现利用的是二进制本身的倍增特性。把一个数 \(n\) 用二进制展开, 阅读全文
posted @ 2024-06-10 08:21 RonChen 阅读(35) 评论(0) 推荐(0) 编辑