摘要: 概率 概率:随机事件发生的可能性,是一个 \(0\) 到 \(1\) 之间的实数。 古典概型:\(P(A)= \frac{ A \mbox{ 发生的情况数 } }{\mbox{ 总情况数 }}\) 古典概型的特点: 有限性:所有可能出现的基本事件只有有限个 等可能性:每个基本事件出现的可能性相等 如 阅读全文
posted @ 2024-07-25 09:33 RonChen 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 公共祖先: 在一棵有根树上,若节点 \(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) 编辑
摘要: 例题:P3459 [POI2007] MEG-Megalopolis 给定一棵 \(n\) 个节点的树,根节点为 \(1\),开始每条边边权为 \(1\)。有 \(m+n-1\) 次操作,每次修改操作使得某条边边权为 \(0\),每次查询操作询问 \(1\) 到某个点的边权和。 数据范围:\(n \ 阅读全文
posted @ 2024-06-09 21:44 RonChen 阅读(12) 评论(0) 推荐(0) 编辑
摘要: 背包类问题是动态规划的一类问题模型,这类模型应用广泛。背包类问题通常可以转化成以下模型:有若干个物品,每个物品有自己的重量和价值。选择物品放进一个容量有限的背包里,求出在容量不超过最大限度的情况下能拿到的最大总价值。 01 背包问题 背包类问题中最简单的是 01 背包问题:有 \(n\) 个物品,编 阅读全文
posted @ 2024-05-31 19:08 RonChen 阅读(37) 评论(0) 推荐(0) 编辑
摘要: 树形 DP 即在树上进行的 DP。 常见的两种转移方向: 父节点 \(\rightarrow\) 子节点:如求节点深度,\(dp_u = dp_{fa} + 1\) 子节点 \(\rightarrow\) 父节点:如求子树大小,\(dp_u = 1 + \sum dp_v\) 习题:P5658 [C 阅读全文
posted @ 2024-05-21 19:16 RonChen 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 树的直径是指树上最远的两点间的距离,又称为树的最远点对。有两种方法求树的直径,时间复杂度都为 \(O(n)\): 做两次 DFS(或 BFS) 树形 DP 两种方法有各自的优点和缺点。 做两次 DFS(或 BFS)方法的优点是能得到完整的路径。因为它用搜索的原理,从起点 \(u\) 出发一步一步求 阅读全文
posted @ 2024-05-12 12:02 RonChen 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 二分图 bool dfs(int u, int c) { if (color[u] == c) return true; else if (color[u] == 3 - c) return false; color[u] = c; for (int v : graph[u]) if (!dfs(v 阅读全文
posted @ 2024-05-04 11:19 RonChen 阅读(31) 评论(0) 推荐(0) 编辑