Tarjan离线求LCA

Posted A_Cherry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tarjan离线求LCA相关的知识,希望对你有一定的参考价值。

Tarjan离线算法,相当于就是把整个树给DFS了一遍。DFS的同时,处理关于当前节点的询问。复杂度就是:O(n + q),n为总结点数,q为询问结点对数。

具体是怎么一回事呢。

看一下这个画个图理解一下就好了。

 

//parent为并查集,FIND为并查集的查找操作
//QUERY为询问结点对集合
//TREE为基图有根树
 Tarjan(u)
      visit[u] = true
      for each (u, v) in QUERY
          if visit[v]
              ans(u, v) = FIND(v)
      for each (u, v) in TREE    
          if !visit[v]
              Tarjan(v)
              parent[v] = u

 

是的,感觉看完这个之后什么都记起来了。

以上是关于Tarjan离线求LCA的主要内容,如果未能解决你的问题,请参考以下文章

[LNOI2014] LCA

POJ 1470 Closest Common Ancestors (模板题)(Tarjan离线)LCA

LCA 离线做法tarjan

笔记:LCA最近公共祖先 Tarjan(离线)算法

LCA(最近公共祖先)--tarjan离线算法 hdu 2586

[POJ1330]Nearest Common Ancestors(LCA, 离线tarjan)