我认为算法竞赛主要分为以下几类(这只是博主的一些个人看法~~)
-
基础算法;
-
字符串;
-
图论;
-
数据结构;
-
动态规划;
-
数论;
-
计算几何;
下面就是关于这些知识板块的一些套路总结(对题目的转化);
1.基础算法:
基础算法也就是一些通用的技巧,比如:贪心,二分,倍增……
别看这些东西看起来似乎很简单的样子,但是当真正的运用起来时,你就会发现他们其实并不简单;
贪心:不相交区间,区间选点,区间覆盖,工作调度,有期限的单位时间调度;
二分:最大值最小/最小值最大,在单调性序列中快速查找;
倍增:静态区间查询(RMQ),点/线段的快速移动(树上/区间);(通过预处理来降低在执行其他操作时的复杂度)
2.字符串(还没系统地学习过~~)
3.图论:
图一般分有向图和无向图,在这其中还有一些特殊例子:环,树;
最短路算法:Dijkstra(有队列优化),Floyd,Bellman-ford(有队列优化);
最小生成树:Kruskal(边),Prim(点);
Tarjan:有向边(强连通分量),无向边(割点,桥);
欧拉回路:DFS/Fleury算法
二分图,网络流……(没学过~~)
4.数据结构:
树状数组/线段树:加速区间操作;
主席树(动态开点线段树):按秩合并,区间第K大
树链剖分:一种对树上节点重新编号的方法;
平衡树:(还没学~~)
有关一些套路的总结~~
原文:https://www.cnblogs.com/nnezgy/p/11700186.html