部分懒得写了基于LLM自动补全的, 其实有点问题, 待改正
Kruskal 重构树
在跑Kruskal的同时维护并查集集合的来源,并储存为一个二叉树
具体步骤如下:
合并集合A,B的时候(对应加边), 新建一个节点, 它的左右儿子分别是A,B的根节点, 并将A,B的根节点的父亲设为这个节点, 同时将该点点权设为边权
性质:
两个点之间的所有简单路径上最大边权的最小值 = 最小生成树上两个点之间的简单路径上的最大值 = Kruskal 重构树上两点之间的 LCA 的权值
用于解决一些边权约束问题
欧拉降幂
用于快速计算
- 当
时,利用欧拉定理 将指数对 取模降幂。 - 若不互质,则需递归处理:在递归深度较大时给指数加上
以保持正确结果。
摩尔投票
用于在线求数组中出现次数超过一半的元素(多数元素)。
- 维护候选值
cand与计数器cnt(初始无候选)。 - 遍历序列: •
cnt==0时令cand=val,cnt=1; • 否则:若val==cand,cnt++;反之cnt--。 - 第二次遍历确认
cand频数是否 > ⌊n/2⌋。
时间
Pick 定理
对顶点均为整数点的简单多边形,有
其中
- 叉积求
。 由各边 求和。 - 由公式可转化求未知量(多为
或 )。
曼哈顿与切比雪夫
坐标旋转变换:令
则曼哈顿距离
SG定理
无偏博弈(先手必败/必胜)判定:每个状态
结论:若初始局面 SG=0 则后手必胜,否则先手必胜。 性质与应用:
- 多堆异或和定律:若游戏可分解为子局面,则整体 SG 为各子局面 SG 的异或。
- 积木拿取、火柴棒游戏、树上删边等。
卡特兰数
对括号的合法序列数 个叶子的满二叉树数 - 栈的
元素进出序列数 - 圆内互不相交的
条弦的连接方案数 常见做法:预处理逆元 + 阶乘表快速出组合数。
斯特林数
第一类斯特林数
第二类斯特林数
常用板子:预处理三角表或用多项式插值 + 快速幂。
容斥
计算多个集合并集大小:
步骤:状态压缩枚举子集, 奇加偶减;复杂度

