摘要:
Prufer 序列 Prufer 序列可以将一个带标号 \(n\) 个结点的树用 \([1, n]\) 中的 \(n - 2\) 个整数表示,也可以理解为完全图的生成树与数列之间的双射。 建立过程:每次选择编号最小的叶子节点并删掉,然后在序列中记录它连接的节点标号,重复 \(n - 2\) 次后结束 阅读全文
摘要:
wqs二分 用来处理一类带有限制的问题,如恰好选 \(k\) 个,本质是通过二分来规避这个选取数量的限制。 使用前提:原问题具有凹凸性。设 \(g_i\) 表示选 \(i\) 个物品的答案,那么所有 \((i, g_i)\) 点组成一个凸包,满足 \(g'(k)\) 单调。 这类题目通常有以下特点: 阅读全文
摘要:
决策单调性优化 决策单调性是在最优化 DP 中的可能出现的一种性质。 对于形如 \[f_i = \min_{j = 0}^{i - 1} \{ f_j + w(j, i) \} \]的转移方程,记 \(p_i\) 为令 \(f_i\) 取得最小值的 \(j\) 的值(最优决策点)。若 \(p\) 单 阅读全文
摘要:
整体二分 一类题目可以二分解决,但是有多次询问,于是考虑整体二分,主要思想为把多个查询一起解决,是一个离线算法。 使用条件: 答案可以二分求得。 允许离线。 修改对判定答案的贡献互相独立,修改之间互相独立。 修改如果对判定答案有贡献,则贡献为一与判定标准无关的定值。 实现 首先把所有操作按时间顺序存 阅读全文
摘要:
cdq分治 主要思想为分治时分为三个部分处理: 左区间内部。 左区间对右区间。 右区间内部。 一个保险的标准顺序是先处理左区间,再处理左区间对右区间的贡献,最后处理右区间,这样就可以保证时序性了。 注意这种写法在处理左区间对右区间贡献是要先按标号排序分出正确的左右区间,如果是先递归左右区间则不用。 阅读全文
摘要:
拉格朗日插值 考虑这样一个问题:有 \(n + 1\) 个不同的点值 \((x_{0 \sim n} , y_{0 \sim n})\) ,求一个 \(n\) 次多项式,满足其经过上述 \(n + 1\) 个点。 一般性插值法 对于第 \(i\) 个点,考虑构造一个多项式 \(F_i(k) = \b 阅读全文
摘要:
高斯消元 高斯消元法通常用于求解如下的 \(n\) 元线性方程组: \[\begin{cases} a_{1, 1} x_1 + a_{2, 2} x_2 + \cdots + a_{1, n} x_n = b_1 \\ a_{2, 1} x_1 + a_{2, 2} x_2 + \cdots + 阅读全文
摘要:
莫队 假设 \(n, m\) 同阶,对于序列上的区间询问问题,如果得知 \([l, r]\) 的答案,可以在 \(O(1)\) 的时间推算出 \([l - 1, r], [l + 1, r], [l, r - 1], [l, r + 1]\) 的答案,那么我们就可以在 \(O(n \sqrt{n}) 阅读全文
摘要:
反悔贪心 一般贪心仅能解出局部最优解,显然存在题目不满足局部最优解等价于全局最优解,于是引入反悔贪心。 实现 每次都进行操作,若以后有更优情况,撤销这次操作(反悔),本质为跑一遍局部最优假贪心,再通过反悔操作得到答案。 不难发现反悔贪心的核心在于维护反悔操作所需的值,所以当有些题目可以很方便地维护出 阅读全文
摘要:
连通性相关 强连通分量 强连通分量(SCC):极大的强连通子图。 Tarjan 算法 维护一个栈存储搜索到的还未确定强连通分量的点,定义: \(dfn_u\) :节点 \(u\) 被搜索的次序。 \(low_u\) :\(u\) 子树中能回溯到的最小的 \(dfn\) 。 不难得到: 一个点子树内的 阅读全文