LCA与RMQ
cwyupengju
这个作者很懒,什么都没留下…
展开
-
【lca】lca转rmq解法
LCA(a,b)转RMQ就是把从节点a到节点b的这条路径记下来,(用dfs访问变成一维数组,我们称为欧拉序列),询问lca(a,b),就是dfs第一次出现a,b位置 frist[a],frist[b],然后求欧拉序列上面 [ frist[a],frist[b] ] 区间去找深度值最小的那个节点,这个节点的编号对应的节点就是所求的LCA。至于为什么说深度最小的这个节点为所求是因为深度最小这个节点原创 2015-07-30 11:31:26 · 616 阅读 · 0 评论 -
RMQ的st算法详解
rmq问题--st算法1. 概述RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j当然,该问题也可以用线段树(也叫区间树)解决,算法复杂度为:O(N)~O(logN),这里我们暂不介绍。 2.RMQ算法对于该问题,最容易想到的解决方案是遍历,复杂度是O(n转载 2015-07-30 11:56:15 · 262 阅读 · 0 评论 -
[LCA] tarjan算法 模版
LCA算法:LCA(Least Common Ancestor),顾名思义,是指在一棵树中,距离两个点最近的两者的公共节点。也就是说,在两个点通往根的道路上,肯定会有公共的节点,我们就是要求找到公共的节点中,深度尽量深的点。还可以表示成另一种说法,就是如果把树看成是一个图,这找到这两个点中的最短距离。tarjan算法是离线算法,复杂度为O(n+Q),使用了并查集+dfs的操作。中间原创 2015-07-30 10:58:44 · 952 阅读 · 0 评论