ACM技能表
看看就好了(滑稽)
数据结构
栈
- 栈
- 单调栈
队列
- 一般队列
- 优先队列/单调队列
- 循环队列
- 双端队列
链表
- 一般链表
- 循环链表
- 双向链表
- 块状链表
- 十字链表
邻接表/邻接矩阵
- 邻接表
- 邻接多重表
Hash表(哈希表)
- Hash表
- 字符串Hash
二叉树
- 一般二叉树
- 遍历二叉树
- [ ] 先序遍历二叉树
- [ ] 中序遍历二叉树
- [ ] 后序遍历二叉树
- Huffman树(赫夫曼树)(最优二叉树)
- Huffman编码(赫夫曼编码)
- 二叉查找树/二叉排序树/二叉搜索树
- [ ] Treap
- [ ] 伸展树
- 线索二叉树
- 平衡二叉树
堆
- 大/小根堆(优先队列)
- 可并堆
- 左偏堆
线段树
- 一维线段树
- 延迟标记
- 二维线段树
- 区间合并
- 区间离散化/压缩
- 扫描线
- 线段树套平衡树
- 主席树/可持久化线段树
树状数组
- 一维树状数组
- [ ] 单点查询+区间修改
- [ ] 区间查询+单点修改
- [ ] 区间查询+区间修改
- 二维树状数组
- [ ] 单点查询+区间修改
- [ ] 区间查询+单点修改
- [ ] 区间查询+区间修改
- N维树状数组
- 逆序对问题
字符串
- 回文字符串
- [ ] 判断
- [ ] 最长回文子串
- [ ] 朴素O(n3)
- [ ] 中心扩散O(n2)
- [ ] 动态规划O(n2)
- [ ] Manacher算法(马拉车算法)O(n)
- KMP算法
- 最小表示法
- 字典树/Trie树
- [ ] 静态建树
- [ ] 动态建树
- [ ] 可持久化Trie树
- 后缀数组
- 后缀树
- 后缀自动机
- Aho-Corasick自动机/AC自动机
并查集
- 并查集
- 路径压缩
- 边带权并查集
分块
RMQ问题
- 朴素
- 线段树
- ST表
- RMQ标准算法
离散化
红黑树
跳跃表
图论
搜索
- 深度优先遍历/DFS
- [ ] 深度优先遍历/DFS
- [ ] DFS序
- [ ] 迭代加深DFS(ID-DFS)
- [ ] 双向DFS
- 广度优先遍历/BFS
- [ ] 广度优先遍历/BFS
- [ ] 双端队列BFS
- [ ] 优先队列BFS
- [ ] 多起点BFS
- [ ] 双重BFS
- [ ] 双向BFS
- 剪枝
- 拓扑排序
- 状态压缩
- A*算法
- IDA*算法
- 记忆化搜索
强连通分量
- 强连通分量
- [ ] Tarjan算法
- [ ] Korasaju算法
- 双连通分量
- 强连通分支及其缩点
- 图的割边和割点
- 2-SAT问题
- 欧拉路问题
- [ ] 欧拉路径
- [ ] 欧拉回路
- 哈密顿回路
最小生成树
- Prim算法
- Kruskal算法(稀疏图)
- Sollin算法
- 次小生成树
- [ ] Prim算法
- [ ] Kruskal算法+LCA
- 最小有向生成树
- 第k小生成树
- 最优比例生成树
- 最小树形图
- 最小瓶颈生成树
- [ ] 最小瓶颈生成树
- [ ] 每对结点间最小瓶颈路
- 最小瓶颈路
- 最小度限制生成树
- 增量最小生成树
- 平面点的欧几里德最小生成树
- 平面点的曼哈顿最小生成树
- 最小平衡生成树
最短路径
- 单源最短路径
[ ] 有向无环图的最短路径
- [ ] 拓扑排序
[ ] 非负权值加权图的最短路径
- [ ] Dijkstra算法
- [ ] Dijkstra算法(二叉堆优化)
- [ ] 含负权值加权图的最短路径
- [ ] Bellman-Ford算法
- [ ] SPFA算法
- 全源最短最短路径
- [ ] Floyd算法
- [ ] Johnson算法
- 次短路径
- 第k短路径
- 差分约束系统
- 平面点对的最短路径(优化)
- 双标准限制最短路径
环
- 环判定
- 负环判定
- [ ] Bellman-Ford算法
- [ ] SPFA算法
网络流
- 最大流问题
[ ] 增广路算法
- [ ] 增广路定理
- [ ] Ford-Fulkerson算法
- [ ] Ford-Fulkerson迭加算法
- [ ] Edmond-Karp算法
- [ ] Dinic算法
- [ ] ISAP算法/最短增广路算法
[ ] 预流推进算法
- 最小割最大流定理
- [ ] 多源多汇问题
- [ ] 无源无汇有容量下界网络的可行流
- [ ] 有容量下界网络的s-t最大/最小流
- [ ] 节点有限制的网络流
- 最小费用最大流问题
- [ ] 容量不固定的s-t最小费用流
- [ ] 含负费用的最小费用最大流
- [ ] 费用与流量平方成正比的最小流
二分图匹配
- 二分图判定
- 二分图最大匹配
- [ ] 匈牙利算法
- Konig定理
- 二分图最小点覆盖
- [ ] 匈牙利算法
- 二分图最小边覆盖
- 二分图最佳完美匹配
- [ ] Kuhn-Munkres算法
- 二分图完全匹配
- [ ] Kuhn-Munkres算法
- 二分图多重匹配
- 二分图带权最大匹配
- [ ] Kuhn-Munkres算法
- 二分图最大独立集
- 最大闭合子图
- 最大密度子图
- 公平分配问题
- 区间k覆盖问题
- 有向无环图(DAG)的最小路径覆盖
- [ ] DAG的最小不相交路径覆盖
- [ ] DAG的最小可相交路径覆盖
树的直径
- 树形DP
- BFS
基环树
最近公共祖先
- 向上标记法
- 树上倍增
- Tarjan 算法
- LCA 转 RMQ
弦图
稳定婚姻问题
动态规划
四边形不等式理论
不完全状态记录
- 青蛙过河问题
- 区间DP
背包问题
- 0-1背包
- 完全背包
- 分组背包
- 多重背包
- 判定性背包问题
- 带附属关系的背包问题
- + -1背包问题
- 双背包求最优值
- 构造三角形问题
- 带上下界限制的背包问题(012背包)
线性的动态规划问题
- 积木游戏问题
- 决斗(判定性问题)
- 圆的最大多边形问题
- 统计单词个数问题
- 棋盘分割
- 日程安排问题
- 最***近问题(求出两数之比最接近某数/两数之和等于某数等等)
- 方块消除游戏(某区间可以连续消去求最大效益)
- 资源分配问题
- 数字三角形问题
- 漂亮的打印
- 邮局问题与构造答案
- 最高积木问题
- 两段连续和最大
- 2次幂和问题
- N个数的最大M段子段和
- 交叉最大数问题
判定性问题的DP(如判定整除、判定可达性等)
- 模K问题的DP
- 特殊的模K问题,求最大(最小)模K的数
- 变换数问题
单调性优化的动态规划
- 1-SUM问题
- 2-SUM问题
- 序列划分问题(单调队列优化)
剖分问题(多边形剖分/石子合并/圆的剖分/乘积最大)
- 凸多边形的三角剖分问题
- 乘积最大问题
- 多边形游戏(多边形边上是操作符,顶点有权值)
- 石子合并(N^3/N^2/NLogN各种优化)
贪心的动态规划
- 最优装载问题
- 部分背包问题
- 乘船问题
- 贪心策略
- 双机调度问题Johnson算法
区间DP
数位DP
状态DP
- 牛仔射击问题(博弈类)
- 哈密顿路径的状态dp
- 两支点天平平衡问题
- 一个有向图的最接近二部图
树型DP
- 完美服务器问题(每个节点有3种状态)
- 小胖守皇宫问题
- 网络收费问题
- 树中漫游问题
- 树上的博弈
- 树的最大独立集问题
- 树的最大平衡值问题
- 构造树的最小环
数学
数论
- 积性函数
- 佩尔方程
- 同余
- [ ] 同余定理
- [ ] 费马小定理
- [ ] 欧拉定理
- [ ] 欧拉定里推论
- [ ] 扩展欧几里得算法
- [ ] 中国剩余定理
- [ ] 乘法逆元
- 素数
- [ ] 欧几里得定理
- [ ] 朴素法
- [ ] 筛选法
- [ ] Eratosthenes筛选法
- [ ] 线性筛
- [ ] 米勒测试法
- 约数/因数/因子
- 连分数逼近
- 循环群生成元
- 进制位
矩阵
- 矩阵乘法
- 矩阵快速幂
- 矩阵转置
组合数学
- 排列组合
- 容斥原理
- 递推关系和生成函数
- Lucas定理
- Polya计数法
- N皇后构造解
- 幻方的构造
- Catalan数列
- Stirling数列
- 斐波拉契数
- 调和数
- 连分数
- MoBius
- 偏序关系理论
计算几何
- 基本公式
- 线段
- 多边形
- 三角形
- 圆
- 球
- 可视图的建立
- 对踵点
- 经典问题
计算方法
- 二分法
- 迭代法
- 三分法
- 快速幂
- 解线性方程组
- 解模线性方程组
- 定积分计算
- 多项式求根
- 周期性方程
- 线性规划
- 快速傅立叶变换
- 随机算法
- 0/1分数规划
- 迭代逼近
- 矩阵法
概率论
- 全概率公式
- 数学期望
博弈论
- SG函数
- 极大极小过程
- Nim问题