摘要:
公共祖先: 在一棵有根树上,若节点 是节点 的祖先,也是节点 的祖先,那么称 是 和 的公共祖先。 最近公共祖先(LCA): 在 和 的所有公共祖先中,深度最大的称为最近公共祖先,记为 \(LCA(x,y 阅读全文
摘要:
树状数组(Binary Indexed Tree,BIT)是一种用于维护 个元素的前缀信息的数据结构。 以前缀和为例,对于数列 ,可以将其存储为前缀和数组 的形式,其中 。那么通过前缀和数组,就可以 阅读全文
摘要:
倍增法与二分法是“相反”的算法,二分法是每次缩小一半,从而以 的速度快速缩小定位到解;倍增法是每次扩大一倍,从而以 的速度快速地扩展到解空间。 倍增就是“成倍增长”,很多时候倍增的实现利用的是二进制本身的倍增特性。把一个数 用二进制展开, 阅读全文
摘要:
例题:P3459 [POI2007] MEG-Megalopolis 给定一棵 个节点的树,根节点为 ,开始每条边边权为 。有 次操作,每次修改操作使得某条边边权为 ,每次查询操作询问 到某个点的边权和。 数据范围:\(n \ 阅读全文
摘要:
背包类问题是动态规划的一类问题模型,这类模型应用广泛。背包类问题通常可以转化成以下模型:有若干个物品,每个物品有自己的重量和价值。选择物品放进一个容量有限的背包里,求出在容量不超过最大限度的情况下能拿到的最大总价值。 01 背包问题 背包类问题中最简单的是 01 背包问题:有 个物品,编 阅读全文
摘要:
树的直径是指树上最远的两点间的距离,又称为树的最远点对。有两种方法求树的直径,时间复杂度都为 : 做两次 DFS(或 BFS) 树形 DP 两种方法有各自的优点和缺点。 做两次 DFS(或 BFS)方法的优点是能得到完整的路径。因为它用搜索的原理,从起点 出发一步一步求 阅读全文