LCA思想:在求解最近公共祖先為問題上,用到的是Tarjan的思想,從根結點開始形成一棵深搜樹,非常好的處理技巧就是在回溯到結點u的時候,u的子樹已經遍歷,這時候才把u結點放入合并集合中,
這樣u結點和所有u的子樹中的結點的最近公共祖先就是u了,u和還未遍歷的所有u的兄弟結點及子樹中的最近公共祖先就是u的父親結點。以此類推。。這樣我們在對樹深度遍歷的時候就很自然的將樹中的結點分成若干的集合,兩個集合中的所屬不同集合的任意一對頂點的公共祖先都是相同的,也就是說這兩個集合的最近公共最先只有一個。對于每個集合而言可以用并查集來優化,時間復雜度就大大降低了,為O(n + q),n為總結點數,q為詢問結點對數。
轉載于:https://www.cnblogs.com/hujunzheng/p/3945885.html