合集-学习笔记
摘要:基于倍增的状态设计 P1081 [NOIP 2012 提高组] 开车旅行 CF1516D Cut 对于每一个 \(i\) 去尺取其 \(\gcd\) 为一的最长区间的右端点。设 \(dp_{i, j}\) 表示从点 \(i\) 开始跳 \(2 ^ j\) 个区间到达的点。查询时从 \(l\) 开始倍
阅读全文
摘要:树的直径 模板题。 定义 树的任意两点之间的最长简单路径。 求法 dfs 做法 从任意一个节点 dfs 到和其距离最远的节点,可以证明其为树的直径的一端。然后再以直径的一端 dfs 走到和其距离最远的节点即可得出答案。 若要记录直径路径的话只需在第二次 dfs 上记录每个节点的前驱即可。 inlin
阅读全文
摘要:看了很多题目,个人觉得现阶段以考察矩阵乘法(快速幂)、高斯消元法求线性方程组的解、矩阵优化 dp、一些 trick(线段树维护矩阵,kmp 套矩阵等)以及矩阵自身性质的深层次运用为主。 P1962 斐波那契数列 应该是典题。从这道题我们可以发现矩阵优化 dp 的最有效办法是手模,所以此类题目一般考察
阅读全文
摘要:前言 引用一句刘邦的话:“有时 01 Trie 胜于 01 Trie。” 正文 前景提要 Trie(串串咕了 qwq)。 位运算。 贪心。 01 trie 简介 实质上是字符集只有 \(\left \{ 0,1 \right \}\) 的 trie。 由于每一个自然数一定可以进行二进制拆分,所以一个
阅读全文
摘要:问题模型 给定 \(a,b\) 两个长度为 \(n\) 的序列,求下列式子最大值: \[\frac{\sum_{i = 1} ^ {n} a_i · x_i}{\sum_{i = 1} ^ {n} b_i · x_i} \]其中 \(\forall i \in [1, n], x_i \in \le
阅读全文
摘要:并查集 普通并查集 路径压缩写法: struct Union_Find_Set { int f[N]; inline void init() { for(int i = 1 ; i <= n ; ++ i) f[i] = i; } inline int find(int x) { if(x != f
阅读全文
摘要:动态开点 当正常堆式建树开不下时(\(n\) 或 \(V\) 过大),通常使用动态开点。 例题 P2781 传教 算是很板了吧? 每次修改的时候,若当前访问节点未建立则新建节点并回溯至上一个节点记录左右儿子。实测写 & 引用或 struct 是很方便的。 要十分注意的是在 work 函数(单点修改
阅读全文
摘要:定义 是指将一棵树划分成若干条链。常见的剖分方式有长链剖分、重链剖分、实链剖分。 重链剖分 从轻重儿子的角度将树划分成多条“重链”,进而将重链转换成区间问题解决。 步骤 dfs 预处理一棵树的深度、父节点、子树大小、重儿子(\(dep, fa, sz, son\))。 对于每个轻儿子,再次 dfs,
阅读全文
摘要:入门 例题 [ABC329F] Colored Ball。 题意 给定 \(N\) 个盒子,每个盒子里面有一个颜色为 \(C_i\) 的小球。有 \(Q\) 次操作,每次操作将第 \(a_i\) 个盒子中的球都放到第 \(b_i\) 个盒子里面,你需要在每次操作后输出当前操作结束后第 \(b_i\)
阅读全文
摘要:一个 kmp 学了 \(n\) 遍终于学懂的屑菜 bot。 下文默认文本串为 \(s\),模式串为 \(t\)。 前缀函数 定义 \(\pi_i\) 表示前缀为 \(i\) 的子串中的最长公共前后缀(border)长度。 求取 暴力 \(O(n ^ 3)\) 去暴力枚举。 高效算法 第一个重要的观察
阅读全文
摘要:字符串哈希 形式 \[pre_i = pre_{i - 1} \times base + s_i \to pre_i = \sum_{j = 1}^i s_j \times base^{i - j} \]截取子串 \[Hash_{[l, r]} = pre_r - pre_{l - 1} \time
阅读全文
摘要:二分图 定义 对于一张无向图 \(G\),若所有点可以分为两个点集 \(A\) 和 \(B\),且 \(A\) 和 \(B\) 的内部没有连边,那么我们称 \(G\) 可以划分为一张二分图。 二分图的划分不唯一,也不一定联通,也不一定有环。 存在的充要条件 若无向图 \(G\) 是二分图,那么 \(
阅读全文
摘要:简介 基于分裂与合并的 Treap。 基本操作 split 分裂 按权值分裂: inline void split(int p, int k, int &x, int &y) {// p 表示当前分裂树的根节点,x,y 表示分裂成的两棵树的根节点,k 为关键字 if(! p) return x =
阅读全文
摘要:简介 将多棵线段树的信息统一起来的高效算法称之为线段树合并。 通常合并顺序呈树状结构。 例题 P3224 [HNOI2012] 永无乡 假设所有点都在一个连通块里,那么我们只需要维护一个值域线段树并在上面二分即可。 但此时图不连通,我们该如何快速的统计信息呢? 对于连边,并查集可以胜任。 对于信息的
阅读全文
摘要:李超线段树 李超线段树通常维护两个操作: 插入一个一次函数 查询直线 \(x = k\) 处的先前插入的函数最值 流程 插入 考虑因为插入的都是直线,所以函数在区间 \([L, R]\) 具有单调性。 李超线段树维护的叫做最优势线段,也就是线段树上区间 \([L, R]\),维护的是取 \(mid
阅读全文
摘要:简介 通过定义势能函数 \(\phi(i)\) 去描绘整个序列的势能从而推导正确的复杂度。 例题 P4145 上帝造题的七分钟 2 / 花神游历各国 典。 设 \(\phi(i)\) 表示第 \(i\) 个元素的势能。 一个元素不停的开根一定会变成 \(1\),不妨将元素 \(x\) 改写成 \(2
阅读全文
摘要:概念 概率 定义 令 \(P(A)\) 为事件 \(A\) 可能发生的概率。若事件 \(A\) 在 \(n\) 件事中独立存在,则 \(P(A) = \frac{1}{n}\)。 性质 设 \(P(A \cap B)\) 表示两个互不干扰的独立事件都发生的概率,则: \[P(A \cap B) =
阅读全文
摘要:定义 带权路径长度 节点权值乘点到根节点的距离。 哈夫曼树 树上所有节点带权路径长度之和最小的二叉树。 性质 满二叉树 原序列构成哈夫曼树的所有叶子节点 离根节点越近,点权越大 非叶子节点的点权之和就是所有叶子节点的带权路径之和 哈夫曼树总节点数为 \(2n - 1\),\(n\) 为叶子节点数量
阅读全文
摘要:前言 贪心常用的思考和证明方法: 反证法。 邻项交换。 数学归纳法。 最优子结构 对于一个子问题,其最优解由它的更小的子问题的解得到。 dp 子问题的最优解是由更小的若干子问题的解组合得到。 贪心子问题的最优解是由更小的子问题的最优解得到。 杂记 线段覆盖 给定 \(n\) 个线段,求最多选择对少线
阅读全文
摘要:效果 可以追溯到任何一次修改前的状态。 可持久化线段树 维护区间的可持久化线段树。 维护值域的可持久化线段树(主席树)。 例题 P3919 【模板】可持久化线段树 1(可持久化数组) 板子。 #include <bits/stdc++.h> #define int long long using n
阅读全文
摘要:整体二分 引言 整体二分用于解决一些决策性单调的分治问题,其核心思想就是利用分治将同一个范围内的答案统一处理。 使用条件 单个询问可以用二分解决(可二分性)。 修改对答案贡献互相独立,修改之间互不影响。 允许离线。 例题 P3527 [POI 2011] MET-Meteors 单组询问可二分,操作
阅读全文
摘要:简介 分治思想的离线数据结构。适于处理区间内统计元素个数相关的问题。 主要包括: 普通莫队(只有询问)。 带修莫队(修改和询问并存)。 回滚莫队(只增加或只删除)。 树上莫队。 二次离线莫队。 例题 P3901 数列找不同 将以此题为例,剖析莫队的主要思想。 统计区间内出现次数恰好为一次的元素个数
阅读全文
摘要:网络最大流 设有若干节点,对于任意点 \(x\),流入 \(x\) 和流出 \(x\) 的流量相等。有两个特殊的点 \(S, T\) 表示源点和汇点。\(S\) 只流出不流入, \(T\) 只流入不流出。节点之间由若干条有向边连接,边权 \(w\) 表示流经该边的流量上限。 网络流中较为重要的一环是
阅读全文
摘要:实现 将无向图的边按边权排序。 枚举排序后的边 \(e\),若 \(e\) 的两个端点 \(x, y\) 不连通,那么新建节点 \(p\),点 \(p\) 连接 \(x, y\) 所在连通块的根,将 \(p\) 的点权设为 \(e\) 的边权。 枚举结束后,得到的一棵树成为 kruskal 重构树。
阅读全文
摘要:CF1336C Kaavi and Magic Spell \(S\) 串两端添加具有区间 dp 的特征。 \(S \to T\) 的构建一定是从短到长的,考虑区间 dp。 设 \(dp_{i, j}\) 表示构建出 \(T : [i, j]\) 的方案数。 答案:\(\displaystyle \
阅读全文
摘要:前言 博客。 通常是设一个二进制状态表示物品的取舍从而去转移。所以实际上其状态总数是没有变的,状压过程只是让状态排列的更加紧密了。 子集枚举 题目: 给定一个长度为 \(n\ (n\le15)\) 的排列,问此排列中的 \(n\) 个元素所组成的每一个集合的所有子集。 考虑暴力枚举一下。 for(i
阅读全文
摘要:简介 解决大区间 \([L, R]\) 中满足条件的元素的个数的统计问题。 通常使用记忆化搜索实现,尤其注意前导零与上界答案的情况。 例题 HDU2089 不要62 人机题。 注意特判 \(l = 0\) 的情况。 代码: #include <iostream> #include <cstdio>
阅读全文
摘要:P2585 [ZJOI2006] 三色二叉树 设 \(dp_{i, 0 / 1 / 2}\) 表示以 \(i\) 为根的子树,且点 \(i\) 颜色为 \(0 / 1 / 2\) 的最多绿色节点数。 答案为 \(\max \{ dp_{root, 0}, dp_{root, 1}, dp_{root
阅读全文
摘要:简介 一般问题为:考虑一个元素插入在其它元素的前 / 后。 状态设计一般为 \(dp_{i, j}\) 表示前 \(i\) 位且第 \(i\) 位排名为 \(j\) 的方案数。 例题 AT_dp_t Permutation 插入 dp 板子。 AT_abc209_f [ABC209F] Defore
阅读全文
摘要:简介 是一种关于决策集合的优化。利用单调性,将不可能的决策点提前删除。 状态转移的特征: \[dp_i = \min_{j \in [i - w, i - 1]} \{ dp_j + a_j + b_j + c \} \]即: 状态有最大或最小值。 决策点不仅有上界,而且有下界,下界随着 \(i\)
阅读全文
摘要:经典图论 例题 P6833 [Cnoi2020] 雷雨 枚举三条路径交,求最小值即可。 最短路树 按松弛操作记录一个点的前驱,将前驱作为父亲建树。 性质 形态不唯一 根节点到其他所有点的最短距离与原图中相同 在所有生成树中,最短路径树满足根节点到其他所有点的距离之和最短 例题 AT_abc252_e
阅读全文

浙公网安备 33010602011771号