目录
堆
dfs
dfs之连通性模型
dfs之搜索顺序
dfs之剪枝
迭代加深
双向dfs
171 送礼物(python3 双向dfs--空间换时间思想)
IDA*
181 回转游戏(python3 IDA*--技巧使得代码编写简单一点)
递归
递归
宽搜
flood fill
1097 池塘计数(python3 flood fill--bfs)
1098 城堡问题(python3 flood fill、二进制移位操作)
1106 山峰和山谷(python3 flood fill--判断连通块的类型)
最短路模型
1076 迷宫问题(python3 bfs 记录最短路方案)
多源bfs
最小步数模型
1107 魔板(python3 最小步数模型--记录字典序最小的方案)
双端队列广搜
bfs的优化--双向广搜和A*
179 八数码(python3 单向bfs搜索,双向广搜,A*算法优化)
递推
1075 数字转换(python3 树形dp-树的最长路径、递推)
数学
筛质数,分解质因数,快速幂
1293 夏洛克和他的girl(python3 二分图、线性筛)
约数个数,欧拉函数
1291 轻拍牛头(python3 约数个数--反过来求解)
200 Hankson的趣味题(python3 暴力枚举优化)
矩阵乘法
组合计数
886 求组合数 II(python3 组合计数--阶乘,逆元,费马小定理)
887 求组合数 III(python3 组合计数--卢卡斯定理)
1309 车的放置(python3 组合计数--乘法原理和加法原理)
1316 有趣的数列(python3 卡特兰数--分解质因数 + 快速幂)
高斯消元
207 球形空间产生器(python3 高斯消元求解线性方程组)
容斥原理
概率与数学期望
博弈论
数学公式
105 七夕祭(python3 环形均分纸牌问题、绝对值不等式)
贪心
差分
二分
RMQ
子序列
1017 怪盗基德的滑翔翼(python3 最长上升子序列扩展)
1012 友好城市(python3 转化-最长上升子序列问题)
187 导弹防御系统(python3 最长上升子序列 + dfs)
线段树
线段树适用于区间的的动态插入,修改,查询的数据结构,时间复杂度可以控制在O(nlogn)。
1277 维护序列(c++-java 线段树)这道题目包含了区间的加法和乘法,是一道关于两个懒标记的综合题目
二分图
对于棋盘类的问题,有两种解决方法:① 状态压缩dp;② 二分图
257 关押罪犯(python3 二分 + 判断是否是二分图)
861 二分图的最大匹配(python3 匈牙利算法找二分图的最大匹配)
372 棋盘覆盖(python3 二分图的最大匹配-匈牙利算法)
位运算
树形dp
285 没有上司的舞会(python3 树形dp 三个辅助数组来建图)
1075 数字转换(python3 树形dp-树的最长路径扩展、递推)
前缀和
区间dp
1068 环形石子合并(python3 环形区间变成链的技巧)
1069 凸多边形的划分(python3 区间dp + 高精度)
479 加分二叉树(python3 区间dp)当题目中还需要额外条件的时候可以使用额外的数组来记录最佳方案
321 棋盘分割(python3 高维区间dp 记忆化搜索)
数位dp
破环成链
1068 环形石子合并(python3 环形区间变成链的技巧)
可持久化
背包问题
1022 宠物小精灵之收服(python3 二维费用的零一背包问题)
12 背包问题求具体方案(python3 零一背包问题求具体方案)
1013 机器分配(python3 多重与分组背包问题扩展)
487 金明的预算方案(c++-python3 分组背包问题扩展)
5 多重背包问题 II(python3 二进制优化-转为零一背包问题求解)
10 有依赖的背包问题(c++-python3 分组背包问题 + 树形dp)
斜率优化
差分约束
差分约束总结(差分约束属于图论中的知识点)
拓扑排序
456 车站分级(python3 拓扑排序求解差分约束问题--平方级别的建图优化)
归并排序
归并排序可以用来求解逆序对的相关问题
高精度乘法
状态压缩dp
524 愤怒的小鸟(python3 状态压缩dp-集合式状态压缩dp)
状态机模型
1057 股票买卖 IV(python3 状态机模型-滚动数组优化)
1052 设计密码(python3 kmp + 状态机模型)
最小生成树
典型应用:
1144 连接格点(python3 kruskal算法-创建所有相邻边的技巧)
扩展应用:
1146 新的开始(python3 添加超级源点-prim算法)
1145 北极通讯网络(python3 kruskal算法)
1148 秘密的牛奶运输(python3 次小生成树、dfs维护树中两个节点的最大距离)
强连通分量
双连通分量
1183 电力(python3 点的双连通分量--求解割点)
spfa找负环
1165 单词环(python3 01分数规划-二分-->巧妙建图)
单调队列优化
1090 绿色通道(python3 二分 + 单调队列优化)
单源最短路径
在一个图中检查连通性可以使用下面的三种常见的方法:① dfs ② bfs ③ 并查集
单源最短路径的建图方式
849 Dijkstra求最短路 I(python3 朴素Dijkstra算法模板)
850 Dijkstra求最短路 II(python3 堆优化版本的Dijkstra算法模板)
851 spfa求最短路(python3 spfa求解最短路径)
1127 香甜的黄油(python3 spfa求解最短路径)
单源最短路径的综合应用:
1135 新年好(python3 单源最短路径 + dfs)
342 道路与航线(python3 单源最短路径 + 拓扑排序)
单源最短路径的扩展应用:
1137 选择最佳线路(python3 单元最短路径扩展-增加一个虚拟源点)
1131 拯救大兵瑞恩(python3 单源最短路径扩展-拆点(dp))
1134 最短路计数(python3 单源最短路径扩展-最短路计数)
383 观光(python3 单源最短路径扩展-次短路的求解)
求解方案数目
11 背包问题求方案数(python3 最优选法的方案数目)
1134 最短路计数(python3 单源最短路径扩展-最短路计数)
最近公共祖先
1171 距离(python3 tarjan算法离线求解最近公共祖先)
356 次小生成树(求python3 求解LCA时候维护两点之间的最大边权和次大边权)
352 闇の連鎖(python3 倍增法求解最近公共祖先、树上差分)
图论问题总结
floyd算法及其变形
1125 牛的旅行(python3 floyd算法的基础应用)
344 观光之旅(python3 floyd算法求解最小环)
345 牛站(python3 类floyd算法求解恰好经过k条边的最短路径)