数据结构
基础
- 栈,队列,并查集,数组,链表,STSTST表,哈希表
- 分块:
- 莫队:
- 线段树:
- 权值线段树:
- 动态开点线段树:当初始序列为空或者答案的统计与初始序列无关时可使用动态开点,每一次修改最多加入logn个点,如此在数据范围较大时可实现O(klogn)O(klogn)O(klogn)的复杂度
- 李超树:
- 线段树合并:
- 树状数组:
- 单调队列:
* 队首是最优值,放入一个元素时将队尾比当前元素劣的元素出队
* 先进先失效,后进后失效(与队列性质有关FIFOFIFOFIFO)
* 越劣的元素失效越快 - 单调栈:
* 栈顶是最优值,放入一个元素时将栈顶比当前元素优的元素出栈
* 先进后失效,后进先失效(与栈的性质有关FILOFILOFILO)
* 约优的元素失效越快 - SplaySplaySplay:
- LCTLCTLCT:
- 可并堆左偏树:
- 虚树:
嵌套
- 总述:外层数据结构的每个节点都用一个内层数据结构处理
- 线段树套线段树
- 线段树套平衡树
- 树状数组套主席树
- 替罪羊树套主席树
可持久化
- 主席树:
- 可持久化字典树:
- 可持久化平衡树:
动态规划
设计
- 设计状态:由少到多以能够描述问题,由多到少简化状态
- 设计转移:
- 类型
* 线性dpdpdp
* 树形dpdpdp
* 数位dpdpdp
* 状压dpdpdp
* 背包
* dpdpdp套dpdpdp
* 插头dpdpdp
* 计数类dp(容斥dp)dp(容斥dp)dp(容斥dp):设计好状态,一般将状态设为不小于或不大于某个值iii的方案数更容易处理。转移时从上一层的i和i−1(或i+1)i和i-1(或i+1)i和i−1(或i+1)两个状态转移而来即可。对于恰好等于一类问题,按照以上方法设置状态后利用容斥原理更容易设计dpdpdp
优化
- 数据结构:常常作为斜率优化,决策单调性等优化方法的辅助
- 斜率优化:可应用单调队列,线段树,平衡树等多种数据结构维护最优斜率
- 决策单调性:
* 打表确定性质
* 单调栈(单调队列)+二分维护决策空间
* 比较简单的直接用单调队列即可维护
* 更普适的做法是整体二分维护决策空间 - wqs二分:
- 单调队列使用要求:
* 决策空间的上下界变化具有的单调性
* val(i,j)val(i,j)val(i,j)中的每一项仅与iii和jjj中的一个有关
决策单调性使用要求:
* 最优决策点具有单调性
* val(i,j)val(i,j)val(i,j)中的每一项不需要仅与iii和jjj中的一个有关
图论
基础
- 最短路
- DAGDAGDAG
- TarjanTarjanTarjan,点双,边双,强连通分量,e−DCCe-DCCe−DCC,v−DCCv-DCCv−DCC
- 欧拉回路,哈密尔顿环
- 差分约束
- 2−SAT2-SAT2−SAT
- 各种生成树
网络流
算法
- DinicDinicDinic
- EKEKEK费用流
模型
- 最大权闭合图:按照最小割分集合模型设计理解
- 最小割可行边,必须边
- 最大密度子图
- 分数规划
- 二分图
* 01染色法
* 最小点覆盖
* 最大独立集
* 最小路径点覆盖
* 可行边,必须边 - 上下界网络流
* 无源汇上下界可行流
* 有源汇上下界可行流
* 有源汇上下界最大,最小流
* 有源汇上下界最小费用可行流 - 性质
* 最小点覆盖=最大独立集
* 最大匹配=最大流=最小割
* 二分图中最小点覆盖=最大匹配
* 常用:二分图中 最大独立集=最小点覆盖=最大匹配=最大流=最小割 - 最小割分集合模型:将所有元素分为两集合并获得最大收益
* 可将最大化收益转化为最小化代价:先将所有收益都选取,即每个元素向两个集合(S和T)(S和T)(S和T)都连边,求出最小割并去除这些收益,便可将所有元素划分到两个集合中,并且损失的代价是最小的。 - 小技巧:
* 点边转化
* 最小割模型中设置正无穷容量边防割断 - 切糕模型
数学
数论
- 欧拉定理,费马小定理,欧拉定理的推论
- gcd,exgcdgcd,exgcdgcd,exgcd
- CRT,exCRTCRT,exCRTCRT,exCRT
- BSGS,exBSGSBSGS,exBSGSBSGS,exBSGS
- 逆元
- 原根(用于NTTNTTNTT)
- 反演
组合数学
- Lucas,exLucasLucas,exLucasLucas,exLucas
- 群论计数
线性代数
- 矩阵加速
- 高斯消元
- FFT,NTTFFT,NTTFFT,NTT
概率期望
- 期望的线性性
- 贝叶斯公式以及推论
计算几何
- 表示方法
- 凸包
- 半平面交
- 旋转卡壳
字符串
- SASASA
- KMPKMPKMP
- hashhashhash
- TireTireTire
- ACACAC自动机
- 串的最小表示法
- ManacherManacherManacher
- 后缀自动机
- 回文自动机
搜索
- DFSDFSDFS
- BFSBFSBFS
- A∗A^*A∗
- IDA∗IDA^*IDA∗
- 折半搜索
- 启发式搜索
分治
- 整体二分
- CDQCDQCDQ分治
- 点分治
- 边分治
- 树链剖分(链分治)

7万+

被折叠的 条评论
为什么被折叠?



