[笔记]Important Tricks And Lemmas

图论

  • 对于图路径的构造,常常思考是否可以对叶子节点进行某种配对。按照 dfs 序对节点进行配对是考虑的方向之一。例题 P7320 「PMOI-4」可怜的团主,P4665 [BalticOI 2015]。

  • 树上路径的交是路径。路径满足边数等于点数 1,通常可以做某些神秘容斥。例题:2024 省选集训 Day8 B。

  • 对于图论中,在出题人数据造的很弱的情况下,将每个点的入度 × 出度进行阈值分值是个很好的办法。

  • 树上点集 S 的公共 lca 即为 lca (dmin,dmax),其中 dmin,dmaxSdfs 序最小和最大的两个节点。

  • 树上点带颜色,想到根号分治、虚树和点分治。一车的 ABC G。

  • 对于点数很少且带限制的最短路,可能用 (min,+) 矩阵快速幂。

  • 完全图最小生成树一定用 Boruvka。

  • 对于树上任意三个点满足 disu,v+disv,wdisu,w

  • 一个图的所有环的交最多有两个点!

  • 如果 lca(u,v)=x,那么 u,v 中必有一个在 x 的轻子树中。

  • 最大团 = 反图最大独立集。例题 AGC067A

  • 对于图的构造,常常想到构造:链、菊花、毛毛虫。两个菊花拼起来似乎比较常考。例题

DP

  • 对于看不出来的计数 dp,对某行 / 某列上拉插可能有用。例子:2024 正睿某题。
  • 分段 + 最小化 / 最大化题目,通常有转移 :fi=min/maxj<i{fj+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 链上二次求和
  • 当实在不会做数据结构题的时候,立即思考分块 / 根号分治 / 阈值重构

数学

  • 随机游走大概率需要高斯消元。
  • 集合划分的方案数是 Bell(n) 级别的。当 n 很小的时候可以考虑暴力集合划分。例如:Yet Another String Matching Problem
  • 某图形中点的计数:将每条线段 lx 投影 l,并计算 ll 围成封闭图形中点的个数。求图形中的点个数可以容斥。
  • (nm)1(mod2)mandn=m
  • 一堆数的线性基等于其异或差分的线性基。这可以支持异或线性基的全局异或。
  • 两个数的乘积是平方数的充要条件:其质因数分解指数模 2 后相等。

字符串

  • 本质不同的回文串数量是 O(n) 级别的。寻找本质不同回文子串的方法:以每个位置为中心从大到小枚举回文子串,并且扔到哈希表里。如果出现过就 break。
  • 回文串的循环节也是回文串。ARC064D

构造

  • 对于网格图上的构造,常常想想是否能够蛇形构造,同心环构造等。P10509
  • 对于序列变换的构造(ab),可以考虑随机排列 p,并且实施 appb 的过程。在随机数据下可能会有优秀的性质。例题P7734 01 串
  • 对于约束不是很强的题,随机调整是不错的选择。
  • 对于图路径的构造,常常思考是否可以对叶子节点进行某种配对。按照 dfs 序对节点进行配对是考虑的方向之一。例题 P7320 「PMOI-4」可怜的团主,P4665 [BalticOI 2015]。
  • 网格图构造黑白染色。黑白染色构造方案代价和一定则必有一种小于等于代价和的一半AGC066A

其他

  • 随机数据下的最优点对:利用大致在三等分点附近的性质,将询问离线进行分治。数据随机下区间点对最优化的乱搞
  • 在序列上的若干区间,若任意两区间之间没有包含关系,则将所有区间按照左端点排序,右端点也一定是升序的。没有例子。
  • 限制为某区间内某些颜色需要出现,则考虑记录每种颜色最后出现的位置。如果时空复杂度太高,可以去掉一维,只记录与当前位置颜色不同的。ARC074E
  • 必要性探路。通过将充分性转化成某些必要性可能有新思路。如 matrix(A)×matrix(B)=matrix(C) 是否成立的判断。
  • 1+2+3++nn i=1kai=n,则本质不同的 ai 只有 O(min{k,n}) 种。CF95E
  • φ(d)d 时,d 可以表示成 2a3b 的形式
  • 当把一个序列变成某个数字时,并且每次操作只能把数字 +1 或者 1,那么这个时候变得这个数字就是中位数。
  • 一堆给定的函数任意排列求复合最值考虑贪心。当为一次函数的时候根据 Exchange Argument 排序,即按照 f1(f2(x))>f2(f1(x)) 排序。ABC366F
  • 二进制一定拆位。ABC366E
  • n150 才敢用退火!!!
  • 看到平均数,中位数,分数果断二分。
  • 随机交换优于临项交换。例题:P7962 [NOIP2021] 方差
  • 看到子树加减,路径加减立刻树上差分。例题:P11189 「KDOI-10」水杯降温
  • 汉诺塔步数 2n
  • sum-sum-interval 考虑每个点对答案的贡献。
posted @   Link-Cut-Y  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示