首先是学习了RMQ求LCA,倍增算法求LCA,树链剖分求LCA,树分治的点边分治,并且看了一些树链剖分的题。
LCA 是最近公共祖先,求LCA主要是把两个结点移动到同一层,然后开始一起向上移动,直到移动到最近的公共祖先,所以,如果在这个移动的过程中,移动的快,算法就好,移动的慢,算法就差。RMQ 是利用求区间最小值+dfs序和深度来求解LCA。朴素算法是每次向上跳一下,倍增是每次跳一倍,剖分是每次跳一条链。
树链剖分大多是求解有关树上的与路径有关的问题。大多代码相似,直接套线段树,比较好理解。树分治主要是点分治和边分治,看的比较少,貌似是求解树上与距离远近有关的题目。
做题巩固和加深对算法的理解,但是思维还是有些受限制,除了很明显的题目,很多读完后,不能知道如何解决这个问题,如何实现。。。思维,还是比较重要。