一 基础算法:
1、栈、单调栈、队列、单调队列
2、STL
3、离散化
4、求逆元
二、初级算法
模拟、枚举、递归、递推、贪心、分治、搜索、动态规划
三、高级算法
1、数据结构:并查集、树状数组
2、字符串:hash、trie树
3、图论:Kruskal、floyd、dijkstra、SPFA、拓扑排序、差分约束、分层图、朴素lca、在线LCA、离线LCA,tarjan、点、边双
4、数论:约数和、约数个数、质数、exgcd、CRT,同余方程组、欧拉函数、欧拉定理、费马小定理、组合数取模、十进制快速幂,积性函数线性筛、置换
5、动态规划:区间DP、树形DP、状压DP、概率DP、数位DP、背包DP、普通DP
常用方法:
一、数据结构
①并查集 (1):判断图的连通性
(2):最小生成树/最大生成树
(3):对具有相同性质的dong xi 进行分类
(4):如果想要知道 对于一个全图 删点之后 ,查询连通性,我们可以反过来搞,将删点转为加点,再查询连通性
(5):在“回溯”的时候进行统计,->带权并查集
(6):注意 数组的大小,(注意 是否 有离散化 <->数组大小)
(7):如果有两类元素,需要对应维护,可以将数组开大,前半段表示第一类元素,后半段表示第二类元素,前后进 行“连边”。->仿佛说的不是很明白
(8):在以为最小/大/...值的情况下,枚举,寻找答案,注意 剪枝!
(9):注意 序列与图的玄学联系与转换 序列<->图 序列<->Kruskal
②树状数组 (1):单点修改,区间查询
(2):区间修改,单点查询(差分)
(3):区间修改,区间查询
(4):区间开放,区间求和-->lalala
二、字符串
①hash (1):单模hash
(2):双模hash
(3):挂链hash(反正我NOIP不会用它的)
(4):注意一些hash的常规操作就好,去我的博客找吧!
②trie树 (1):注意数组的大小