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

 

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

posted @ 2016-03-21 19:10  A_Cherry  Views(138)  Comments(0Edit  收藏  举报