图论
-
对于图路径的构造,常常思考是否可以对叶子节点进行某种配对。按照 dfs 序对节点进行配对是考虑的方向之一。例题 P7320 「PMOI-4」可怜的团主,P4665 [BalticOI 2015]。
-
树上路径的交是路径。路径满足边数等于点数 \(-1\),通常可以做某些神秘容斥。例题:2024 省选集训 Day8 B。
-
对于图论中,在出题人数据造的很弱的情况下,将每个点的入度 \(\times\) 出度进行阈值分值是个很好的办法。
-
树上点集 \(\mathcal{S}\) 的公共 \(\operatorname{lca}\) 即为 \(\operatorname{lca}\) \((d_{\min}, d_{\max})\),其中 \(d_{\min}, d_{\max}\) 是 \(\mathcal{S}\) 中 \(\mathrm{dfs}\) 序最小和最大的两个节点。
-
树上点带颜色,想到根号分治、虚树和点分治。一车的 ABC G。
-
对于点数很少且带限制的最短路,可能用 \((\min, +)\) 矩阵快速幂。
-
完全图最小生成树一定用 Boruvka。
-
对于树上任意三个点满足 \(dis_{u, v} + dis_{v, w} \ge dis_{u, w}\)。
-
一个图的所有环的交最多有两个点!
-
如果 \(\operatorname{lca}(u, v) = x\),那么 \(u, v\) 中必有一个在 \(x\) 的轻子树中。
-
最大团 \(=\) 反图最大独立集。例题 AGC067A。
-
对于图的构造,常常想到构造:链、菊花、毛毛虫。两个菊花拼起来似乎比较常考。例题。
DP
- 对于看不出来的计数 dp,对某行 / 某列上拉插可能有用。例子:2024 正睿某题。
- 分段 + 最小化 / 最大化题目,通常有转移 :\(f_i = \operatorname{\min/\max}\limits_{j < i} \{f_j +cost(j, i)\}\),其中 \(cost(j, i)\) 通常是一个与 \(i\) 有关的函数。该 dp 大概率是凸的,或者可以斜率优化。例如 P3628 APIO2010。
- 常常对 dp 状态数量进行分析。这并不困难,并且有时可以发现状态数很少。例子:Universal Cup, Jinan 2023 B。
- 当遇到某个物品不能选,考虑对前后缀分别做一次 DP,然后再在当前位置合并。本质是缺一分治。
- 环形转移通常会设未知量消元。不要认为只能高斯消元,可能转移层数少的时候只设一个未知量就可以解出一层。ABC333F。
- 常见的计数 DP 转移技巧:每个位置对答案有一个贡献系数,可以通过贡献系数做带修 DP。例题:ZR24 NOIP day4。
- 整体 dp,以及贡献法(考虑每个位置对答案的贡献之和)是常见的办法。
- DP 转移时常常钦定一个转移顺序,如钦定从小到大转移。例题:CF53E(钦定从编号小的叶子向大的转移),P7961 [NOIP2021] 数列(钦定后一个填的数比前一个大)。
数据结构
- 数据结构题修改的位置有特殊限制,需要考虑位置数量是否可以势能分析。P10516 数据结构。
- 对于数据结构题,如果二次求和(\([l, r]\) 子区间和的和),可以考虑每一个数对全局的贡献。例题:P4458 链上二次求和。
- 当实在不会做数据结构题的时候,立即思考分块 / 根号分治 / 阈值重构。
数学
- 随机游走大概率需要高斯消元。
- 集合划分的方案数是 \(\mathbf{Bell(n)}\) 级别的。当 \(n\) 很小的时候可以考虑暴力集合划分。例如:Yet Another String Matching Problem。
- 某图形中点的计数:将每条线段 \(l\) 向 \(x\) 投影 \(l'\),并计算 \(l-l'\) 围成封闭图形中点的个数。求图形中的点个数可以容斥。
- \(\dbinom{n}{m} \equiv 1 \pmod 2 \Longleftrightarrow m \operatorname{and}n = m\)。
- 一堆数的线性基等于其异或差分的线性基。这可以支持异或线性基的全局异或。
- 两个数的乘积是平方数的充要条件:其质因数分解指数模 \(2\) 后相等。
字符串
- 本质不同的回文串数量是 \(O(n)\) 级别的。寻找本质不同回文子串的方法:以每个位置为中心从大到小枚举回文子串,并且扔到哈希表里。如果出现过就 break。
- 回文串的循环节也是回文串。ARC064D。
构造
- 对于网格图上的构造,常常想想是否能够蛇形构造,同心环构造等。P10509。
- 对于序列变换的构造(\(a \rightarrow b\)),可以考虑随机排列 \(p\),并且实施 \(a \rightarrow p\),\(p \rightarrow b\) 的过程。在随机数据下可能会有优秀的性质。例题P7734 01 串。
- 对于约束不是很强的题,随机调整是不错的选择。
- 对于图路径的构造,常常思考是否可以对叶子节点进行某种配对。按照 dfs 序对节点进行配对是考虑的方向之一。例题 P7320 「PMOI-4」可怜的团主,P4665 [BalticOI 2015]。
- 网格图构造黑白染色。黑白染色构造方案代价和一定则必有一种小于等于代价和的一半。AGC066A。
其他
- 随机数据下的最优点对:利用大致在三等分点附近的性质,将询问离线进行分治。数据随机下区间点对最优化的乱搞。
- 在序列上的若干区间,若任意两区间之间没有包含关系,则将所有区间按照左端点排序,右端点也一定是升序的。没有例子。
- 限制为某区间内某些颜色需要出现,则考虑记录每种颜色最后出现的位置。如果时空复杂度太高,可以去掉一维,只记录与当前位置颜色不同的。ARC074E。
- 必要性探路。通过将充分性转化成某些必要性可能有新思路。如 \(\operatorname{matrix}(\mathcal{A}) \times \operatorname{matrix}(\mathcal{B}) = \operatorname{matrix}(\mathcal{C})\) 是否成立的判断。
- \(1 +2 +3 +\cdots +\sqrt n \ge n\) \(\longrightarrow\) \(\displaystyle \sum_{i = 1}^{k} a_i = n\),则本质不同的 \(a_i\) 只有 \(O(\min\{k, \sqrt n\})\) 种。CF95E。
- 当 \(\varphi(d) \mid d\) 时,\(d\) 可以表示成 \(2 ^ a 3 ^ b\) 的形式。
- 当把一个序列变成某个数字时,并且每次操作只能把数字 \(+1\) 或者 \(-1\),那么这个时候变得这个数字就是中位数。
- 一堆给定的函数任意排列求复合最值考虑贪心。当为一次函数的时候根据 Exchange Argument 排序,即按照 \(f_1(f_2(x)) > f_2(f_1(x))\) 排序。ABC366F。
- 二进制一定拆位。ABC366E。
- \(n \le 150\) 才敢用退火!!!
- 看到平均数,中位数,分数果断二分。
- 随机交换优于临项交换。例题:P7962 [NOIP2021] 方差。
- 看到子树加减,路径加减立刻树上差分。例题:P11189 「KDOI-10」水杯降温。
- 汉诺塔步数 \(2 ^ n\)。
- sum-sum-interval 考虑每个点对答案的贡献。