AIGC标识 复习大纲

一、图论(最核心)

算法 用途 关键点
Dijkstra(堆优化) 单源非负权最短路 priority_queuedist 初始化 INF,松弛时更新
SPFA(队列优化 Bellman-Ford) 含负权(判负环) cnt[] 记录入队次数,判负环用 cnt[v] >= n
Floyd 全源最短路(n≤500) 三重循环,dp[i][j] = min(dp[i][j], dp[i][k]+dp[k][j])
Kruskal 最小生成树(MST) 按边权排序,并查集合并,统计边数
Prim(堆优化) 稠密图 MST 类似 Dijkstra,用 vis[] 标记
Tarjan 缩点(有向图 SCC) 强连通分量 dfn[], low[], 栈,缩点后建 DAG
Tarjan 割点 / 桥(无向图) 无向图连通性 割点:low[to] >= dfn[x];桥:low[to] > dfn[x]
LCA(倍增) 树上两点最近公共祖先 预处理 fa[i][j],按深度跳,统一跳
LCA(树剖) 同上,常数略小 轻重链剖分,top[] 跳跃
树链剖分(轻重链) 路径修改 / 查询 + 子树操作 两次 DFS 求 size, son, top, dfn,配合线段树
二分图判定(染色法) 判断是否为二分图 BFS/DFS 染色,相邻异色
二分图最大匹配(匈牙利) 增广路算法 vis[] 标记,递归 match[]
最大流(Dinic) 网络流 bfs 分层,dfs 多路增广,当前弧优化
费用流(MCMF) 最小费用最大流 SPFA 或 Dijkstra(势函数)找增广路

二、数据结构

算法 用途 关键点
并查集 连通性,带权并查集 路径压缩 + 按秩合并,维护关系(如距离)
树状数组(BIT) 单点修改 + 区间查询 / 区间修改 + 单点查询 lowbit,两个 BIT 实现区间加区间和
线段树 区间最值 / 区间和,带 lazy 标记 递归或迭代,注意 pushdown
可持久化线段树(主席树) 静态区间第 k 小 每次插入新建 logN 个节点
平衡树(Treap / Splay) 动态排名,前驱后继 旋转或非旋(FHQ Treap)
ST 表 静态区间最值(RMQ) f[i][j] 预处理,查询取 log
单调队列 / 单调栈 滑动窗口最值,单调性问题 双端队列维护单调性
堆(优先队列) 动态最值,Dijkstra 等 默认大根堆,小根堆 greater
哈希(双模数) 字符串匹配 / 判重 自然溢出或取模,冲突尽量小

三、字符串算法

算法 用途 关键点
KMP 单模式串匹配,求 next 数组 next[i] 表示最长相等前后缀
扩展 KMP(Z 函数) 求每个后缀与串本身的 LCP 线性计算 z[i]
Manacher 最长回文子串(O(n)) 维护中心扩展半径
AC 自动机 多模式串匹配(字典树 + fail 指针) fail 树,结合 DP
后缀数组(SA) 后缀排序,求 height 数组 倍增 + 基数排序
后缀自动机(SAM) 子串相关统计 每次插入字符,维护 len, link, next
哈希 + 二分 求 LCP,判断子串相等 预处理前缀哈希,二分长度

四、数学与数论

算法 用途 关键点
快速幂 幂运算(含取模) 二进制拆分
矩阵快速幂 线性递推(如斐波那契) 矩阵乘法,注意单位矩阵
GCD / 扩展欧几里得 求逆元,解同余方程 exgcd 返回 gcd 及一组解
线性筛(欧拉筛) 求素数,欧拉函数,莫比乌斯函数 每个数只被最小质因子筛一次
逆元(费马小定理 / 扩欧) 模意义下的除法 模数为素数用 pow(a, mod-2)
组合数(预处理阶乘 + 逆元) 大组合数取模 C(n,m)=fac[n]*invfac[m]*invfac[n-m]
卢卡斯定理 大模数(素数)下的组合数 C(n,m) = C(n%p, m%p) * C(n/p, m/p)
中国剩余定理(CRT) 同余方程组求解 两两合并
高斯消元 解线性方程组(实数 / 异或) 消元成上三角,回代
线性基(异或) 求最大异或和,判断异或表示 插入维护高位,贪心求最大
莫比乌斯反演 数论函数求和 预处理 mu,整除分块优化
杜教筛 快速求积性函数前缀和 记忆化递归,构造 g 函数

五、动态规划优化

优化技巧 适用场景 关键点
单调队列优化 DP 转移中与窗口最值相关 维护队列,弹出不优状态
斜率优化(凸包) DP 形如 dp[i]=min(dp[j]+a[i]*b[j]+c[j]) 维护下凸壳,用单调队列或二分
四边形不等式优化 区间 DP 满足四边形不等式 决策点单调,缩小枚举范围
滚动数组 只依赖前几层状态 % 或翻转
状态压缩(状压 DP) n ≤ 20 的集合问题 枚举子集 for(int s=0; s<1<<n; ++s)
数位 DP 统计满足条件的数字个数 记忆化搜索,按位处理,状态记录是否顶界
树形 DP 树上依赖背包 / 最大独立集等 后序遍历,合并子树信息

六、计算几何(常考基础)

算法 用途 关键点
向量叉积 判断方向,面积,点线关系 cross(a,b) = a.x*b.y - a.y*b.x
凸包(Graham 扫描) 求点集凸包 极角排序,单调栈维护左转
旋转卡壳 凸包直径(最远点对) 利用对踵点,双指针
半平面交 求多边形的交集(凸多边形) 排序 + 双端队列
圆相关(交点,切线) 几何模板题 注意精度,用 double

七、其他常用技巧

技巧 用途 关键点
二分答案 最大值最小 / 最小值最大 单调性判断,贪心或模拟验证
三分法 单峰函数求极值 整数或实数,比较 midmid+1
分块(莫队) 离线区间询问 分块排序,暴力移动指针,注意复杂度
CDQ 分治 离线解决三维偏序 / 动态 DP 分治处理左边对右边的影响
整体二分 同时处理多个询问的答案 值域分治,数据结构维护
哈希表(手写) 快速查找,代替 map 链式前向星存冲突
离散化 将大数值映射到紧凑区间 sort + unique + lower_bound
posted @ 2026-09-03 16:19  fl0ppy-  阅读(14)  评论(0)    收藏  举报