LCA(最近公共祖先)離線演算法Tarjan
阿新 • • 發佈:2019-01-31
對於5的每個兒子,LCA,先LCA(1),1沒有兒子,跳過第一個for,然後,visit[1]=true;查詢的vector中(用vector來記錄這個樹和查詢比較好,空間效率比較高),有一組(1,5),可是visit[5]現在仍然是初始值false;
然後,退出1的LCA,回到5的LCA,此時,進行5的第二個兒子4,4沒有兒子,跳過第一個for,然後visit[4]=true;查詢中有三組與4有關的,而只有1被訪問過了,那麼,ancestor(1,4)=father[getfather[1]]=5
退出4的LCA,回到5的,進行5的第三個兒子2,2有一個兒子,進入3的LCA;
3沒有兒子,visit[3]=true;
退出3的LCA,回到2的,而且把3union到2上了,visit[2]=true;查詢中有兩組記錄與2有關,而且都已經訪問過了,那麼,也很同之前一樣,得出結果。
退出2的LCA,visit[5]=true;還有一個關於5的查詢,不再贅述。
程式結束。