演算法筆記 LCA問題 tarjan 離線演算法

2021-06-27 16:44:27 字數 484 閱讀 7160

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 中。。。

LCA離線演算法tarjan

lca演算法 lca least common ancestor 是指在一棵樹中,距離兩個點最近的兩者的公共節點。也就是說,在兩個點通往根的道路上,肯定會有公共的節點,我們就是要求找到公共的節點中,深度盡量深的點。還可以表示成另一種說法,就是如果把樹看成是乙個圖,這找到這兩個點中的最短距離。本文先介...

LCA 離線tarjan演算法

對於最近公共祖先問題,我們先來看這樣乙個性質,當兩個節點 u,v 的最近公共祖先是x時,那麼我們可以確定的說,當進行後序遍歷的時候,必然先訪問完x的所有子樹,然後才會返回到x所在的節點。這個性質就是我們使用tarjan演算法解決最近公共祖先問題的核心思想。同時我們會想這個怎麼能夠保證是最近的公共祖先...

Tarjan演算法求LCA

題源 這個題還是debug了好久。1.呼叫函式中如果要更改外部資料需要傳遞引用,其實傳遞引用往往效率更高,以後要多加注意這一點。2.忘寫並查集了 捂臉逃 3.題目要求的是距離而不是lca,認真審題。貼 include include include define maxn 100005 define...