持续更新
树
- 前缀和与差分
- 树链剖分
- 放到链上考虑
- 线段树合并与线段树分治
- 树的边权与点权间的相互转换
- 考虑点的深度
- 树形 dp,树形依赖背包
- 子树求和转化为 dfs 序 区间求和
- 启发式合并可以快速求多条路径是否经过多个点
- 异或考虑 01 Trie
- 森林中树的数量 点数 边数。
图论
- DAG,拓扑排序 + dp
- 有向图,Tarjan 缩点 DAG
- 关于度数的问题考虑欧拉回路
- 基环树先考虑树的问题
- 选择边可以转化成一个个加边
- 并查集可以维护连通性
- 联通块可以逐一处理,也可以先考虑联通块间的贡献
- 多次询问一个区间,可以考虑线段树
- 用中转点优化建图
- 路径上的最短路,考虑建立最短路树
- 关于边权的最大值最小,考虑建立瓶颈树
- 关于对边权最大值的限制,考虑建立 Kruskal 重构树
字符串
- Trie
- hash
- SAM
- AC 自动机
- kmp
- Manacher
- 嵌套可以区间 dp
dp 优化
- 滚动数组
- 序列自动机
- 预处理
- 考虑冗余的枚举
- 找到状态中两个数的关系,把它们写成一维,或将其中的一维缩小
- 单调队列优化
- 矩阵加速
- 线段树维护
- 考虑将状态和结果互换
偏序
- 拓扑排序(建图)
- cdq 分治(排序,线段树或树状数组维护)
方案数
- 容斥原理
- 组合数
- 计数 dp
颜色
- 四色原理
- 奇偶染色,二分图染色
- 枚举颜色,只保留或删除该颜色
其它
- 二进制分组
- 先枚举或二分一维
- 双指针尺取
- gcd 和 lcm 可以考虑质因子的指数
- 数据有无序性?排个序试一试
- 切比雪夫巨鹿与曼哈顿距离相互转换