【算法竞赛】算法竞赛常用模板目录

基础

标准头文件等前置模板

语法基础:函数、指针、引用、结构体、类、速通Python
算法基础:模拟、递归、回溯、递推、贪心、二分(整体二分)、三分
排序:选择排序、冒泡排序、插入排序、快速排序、归并排序、桶排序、基数排序、堆排序、希尔排序
高精度整数、位运算、时空复杂度分析

离散化、前缀和和差分、逆序对、扫描线、双指针、倍增、三分、枚举子集、枚举超集

数据结构

栈、队列、链表

队列

双端队列
单调队列
两个栈实现的队列

单调栈

链表

双向链表
循环链表

并查集

树状数组

树状数组(简单名次树)
多维树状数组

线段树

线段树最终版 区间加值、设值、容易合并的节点写法,默认有加法和+最小值+最大值
线段树-单点更新
线段树-区间更新
线段树-二分
线段树-字符串哈希
线段树-区间更新最值
可持久化线段树 | 李超线段树 | 线段树合并 | ZKW线段树
线段树合并

权值线段树

线段树(名次树)
动态开点权值线段树/线段树合并
[可持久化权值线段树] 区间第k小 | 带修改区间第k小

平衡树

Treap | 无旋Treap | Splay | 可持久化无旋Treap | 替罪羊树 | AVL | SBT | 红黑树

:堆 | 对顶堆 | 左偏堆 | 可持久化左偏堆 | 斐波那契堆

树链剖分

轻重链剖分
长链剖分(https://www.cnblogs.com/purinliang/p/14403506.html)
树上差分
[LinkCutTree(实链剖分)]

离线算法

莫队算法
树上莫队
树上启发式合并 | CDQ分治 | 扫描线

其他常用数据结构ST表 | Trie | Trie、01Trie

分块
分块 | 莫队算法 | 树上莫队 | 链上分块 | 树上分块

STL

pair | vector | priority_queue | set | map | multiset | multimap | bitset | pbds | unordered_set | unorder_map

静态set | 静态map

技巧

Venice技巧 | 事件模拟 | Dancing Links

可持久化数据结构

可持久化数组 | 可持久化线段树 | 可持久化并查集 | 可持久化权值线段树(主席树)、动态开点 | 可持久化无旋Treap | 可持久化左偏树

不常用的数据结构:
划分树 | KD Tree | Top Tree | 线段树套线段树 | 线段树套平衡树 | 猫树 | 笛卡尔树 | 四分树 | LinkCutTree(实链剖分) | 虚树 | 析合树


数学

常用

排列组合
线性筛
模运算类
高精度整数
矩阵

组合数学

排列组合基础、杨辉三角、有重复的排列组合、二项式定理、期望的线性性、条件概率
容斥原理基础、min-max容斥、二项式反演
常见数列:斐波那契数列、错排问题、卡特兰数、拆分数、斯特林数(第一类、第二类、快速求解(luogu有))、贝尔数、伯努利数

其他组合数学:prufer序列、LGV引理、杨表

群论:置换、Burnside引理、Polya定理

排列组合 | 错位排列 | Catalan数 | 调和数| Lucas定理、扩展卢卡斯定理

Stirling子集数 | Stirling轮换数 | Euler数 | Polya定理 | 线性递推BM算法 | 普通型生成函数 | 指数型生成函数 | 整数划分

数论

数论常识 | 埃筛、线性筛 | gcd、lcm | 快速幂、逆元 | 原根/阶

质数的k次方和 | MillerRabin算法 | PollardRho算法 | 质因数分解

离散对数BSGS算法、Pohlig-Heliman算法 | Euclid算法、扩展 | 中国剩余定理、扩展 | 费马定理、Euler定理、扩展 | 类欧几里得 | Lucas定理、扩展

埃筛、线性筛
欧拉函数 | 莫比乌斯函数 | 整除分块 | 除数函数 | 杜教筛 | Min25筛 | 数论函数求和

二次剩余(勒让德符号、Cipolla算法) | n次剩余 | 佩尔方程、单位根反演

线性代数

矩阵、矩阵快速幂 | 高斯消元法 | 行列式

矩阵的逆 | 线性基 | 常系数齐次、非齐次线性递推 | 矩阵树定理 | 线性递推BM算法 | BEST定理 | 特征值、特征向量

博弈论:[博弈模型] | SG函数、常见结论、不平等博弈、均衡

多项式

快速傅里叶变换FFT(jiangly版) | 快速数论变换FNTT | 拉格朗日插值法 、生成函数、多项式全家桶、集合幂级数FMT/FWT

快速沃尔什变换FWT | 多项式原理 | 多项式模板 | 简易多项式

其他

[字典序第k大的排列] | [位运算] | | [高精度整数] | 表达式求值 | 数值积分 | 高次代数方程求根 | 康托展开 | 格雷码(重要)| 哈夫曼编码 | 线性规划


动态规划

基础:
记忆化搜索 | 动态规划基础(最优子结构、无后效性、状态、阶段、转移)

背包:
01背包 | 多重背包(nml、nmlogl、nm) | 完全背包/无限背包 | 树形背包(n3和n2)| 分组背包 | 混合背包 | 多维背包

区间dp:区间dp基础、区间dp进阶?四边形不等式优化

数位dp:数位dp基础、数位dp进阶?

树形dp:
树形背包 | 换根DP 基础、进阶、高级?

状压dp:普通型、轮廓线型、高维前缀和、动态高维前缀和、插头dp

概率dp:基础、进阶

计数dp:基础、进阶、高级

其他类型dp:图上dp(DAG上dp?)、基环树上dp、自动机上dp、分治dp、填坑dp、动态dp、dp套dp

dp优化:
二进制分组优化 | 单调栈优化 | 单调队列优化 | 斜率优化 | 四边形不等式优化 | wks二分 | 数据结构优化 | 决策单调性(https://blog.bill.moe/1d1d-DP-optimization-notes/)

这里得多看看oiwiki以及网上的资料,感觉高级的动态规划优化是我的薄弱点。

经典问题:
LeetCode面试常见:
最长上升子序列 | 最长公共子序列 | 最长公共上升子序列
整数划分

其他:
2021问题集


字符串

[哈希] | [KMP算法] | 扩展KMP(Z算法)| Trie | 01Trie

[AC自动机] | [后缀自动机] | [回文自动机] | [Manacher] | 后缀数组 | Lyndon分解 | 最小表示法 | 后缀树


图论

常用

图的基本概念、图的遍历(dfs、bfs)、传递闭包(floyd)
格子图
拓扑排序
Dijkstra
基环树
倍增LCA
树的直径
树的重心

树上问题:
常用:
树的基本概念 | 树的遍历 | 树的直径 | 树的重心 | 倍增LCA | TarjanLCA | dfn序、欧拉序

树上数据结构:
轻重链剖分(见数据结构) | 长链剖分 | 树上莫队

树型dp:
树上背包 | 换根DP

树分治:
点分治 | 边分治 | 动态树分治 | 点分树

其他:
虚树 | 仙人掌 | 树哈希 | 树同构AHU算法 | [深度优先搜索树] | [无cross边的环] | 树上启发式合并 | 无根树和Prufer序列 | 树的哈希

最短路

最短路

BFS | [Dijkstra算法] | [Bellman-Ford算法] | Floyd算法 | [Johnson算法] | 有向无环图最短路 | [差分约束系统] | [第k短路] | 最短路径树

生成树:
Kruskal算法 | Prim算法 | Boruvka算法 | [Kirchhoff矩阵树定理] | Kruskal重构树 | 最小树形图 | 单度限制最小生成树 | 最优比例生成树

二分图:
二分图判定 | 匈牙利算法 | Dinic算法 | [一般图最小路径覆盖] Hopcraft-karp算法 | KM算法 二分图匹配判定 | Hall定理 [二分图最大匹配 | 二分图最大独立集 | 二分图最小点覆盖]

双连通分量

点双连通分量
边双连通分量
割点和割边
圆方树
tarjan | kosaraju

强连通分量

强连通分量
必经点和必经边
2-SAT

网络流

最大流 | EK算法 | [Dinic算法] | ISAP算法 | 预流推进算法 | [最小割] | [二分图最大匹配] | [上下界最大流] | 混合图欧拉回路 | SAP算法
费用流 | EK算法 | Dinic算法 | 线性规划 | 上下界费用流 最大权不相交区间 | 最大流 | 可行流 | ZKW费用流
上下界网络流

其他:
欧拉回路和欧拉通路 | 完美消除序列 | 最大团 | 最大独立集 | 点覆盖、独立集、团、路径覆盖 | 一般图最大匹配 | 弦图、弦图判定 | 极大团计数 | 线段树优化建图

竞赛图 | 差分约束 | 斯坦纳树 | 仙人掌 | 最小树形图 | 一般图最大匹配 | 支配树 | 全局最小割(一般的最小割是S到T的最小割)


计算几何

点类:点积、叉积、极角排序
线段相关:相交判定、交点
多边形相关:凸包、多边形包含、旋转卡壳、半平面交、凸包快速操作
圆相关:交点、切线、面积交、面积并
三维计算几何
数值积分:辛普森积分、自适应辛普森积分
点定位
最小圆覆盖
Voronoi图
圆反演
Picks定理

向量 | 极角排序 | 扫描线 | 半平面交
凸包 | 平面最远点对(旋转卡壳) | 最小周长包围矩形 | 最小面积包围矩形
随机优化算法 | 平面曼哈顿距离最小生成树

经典问题:
最小圆覆盖 | 最小球覆盖 | 平面最近点对


其他

标准模板 | 伪随机数生成器mt19937
星期计算 | 日期相隔天数计算 | 斐波那契进制转换 | 罗马进制转换 | 幻方构造 | 数独构造 | 树的计数
搜索:剪枝、折半搜索?DLX = DancingLinks、 A*
分治:树上点分、树上边分、动态树上点分、CDQ分治
随机化:爬山、模拟退火、遗传算法
对拍、自动化测试、常数优化、读入优化、拟阵?


差不多填好的坑:


杜老师和沃老师给的思维导图,目标大概是把橙色难度的学透就差不多了。红色难度以上的可能学一两个模板总结一下就好。不过看起来这个思维导图没有囊括全所有的知识点菜单,也有可能是老师们觉得有些知识很偏吧,这部分可能要去oiwiki学。

posted @ 2020-09-15 11:23  purinliang  阅读(1382)  评论(0编辑  收藏  举报