1. 程式人生 > >【演算法筆記】LCA問題-tarjan 離線演算法

【演算法筆記】LCA問題-tarjan 離線演算法

reference:

演算法流程:

1)讀入表示父子關係的樹

2)儲存所有詢問

3)一次DFS回答所有詢問

演算法的關鍵是:

對於一個正在訪問中的節點u,其訪問過的子樹加上這個節點本身合併為一個等價類,等價類有一個代表元ancestor,值為u。對於u的一個未訪問過的子節點v,如果屬於詢問 query(v, w)且w已訪問過,則LCA(v,w) = ancestor[w]。

下圖中,正訪問到節點10

set1-4是目前的4個等價類

當 node 10 訪問過後,set5 將會被合併到 set4 中,同樣的,set3 會被合併到 set2 中。。。