複習LCA Tarjan演算法

2021-04-24 07:20:39 字數 960 閱讀 6305

解題報告:輸入描述的很恐怖,其實用scanf + getchar也可以很簡單就寫出來,用tarjan演算法要注意,統計祖先的時候要想清楚,不要重複統計和少統計了。

比如:2

解題報告:這個題構樹要用雙向邊,然後dfs時做訪問標記,根節點可以任意選擇乙個,雖然不同的根節點會導致同一對點的祖先不同,但是它們之間的路徑長度是不變的。設d[i]表示從根到i的路徑長度,dis(u,v)=d[u] + d[v] - 2*d[lca(u,v)],很容易想到的。

zoj 2859 matrix searching

看了網上資料,才意識到是二維的

rmq。第一次做

rmq的題目。

從一維rmq

問題的sparse table

演算法可以擴充套件出來。擴充套件的過程想起來還是比較明了的。

這樣預處理的時間複雜度是

o(n*n*log n*log n)。

查詢的複雜度是

o(1)

intt[300][9][300][9];

預處理的遞推公式:

t[i][a][j][b]=

min(t[i][a-1][j][0],t[i+p[a-1]][a-1][j][0]), b=0;

min(t[i][a][j][b-1], t[i][a][j+p[b-1]][b-1]),b>0;

迴圈順序:

2^(k-1)

for(a=0;a

for(b=0;b

LCA tarjan演算法 模版

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

演算法 LCA tarjan 倍增

呃,這個常用但是我一直不會 tar jan tarjan ta rjan tarjan 演算法基於 dfs 在 dfs 的過程中,對於每個節點位置的詢問做出相應的回答。tarjian,邊建邊 邊回答問題 include include include using namespace std intn...

LCA Tarjan演算法理解

scturtleposted 2011年10月08日 11 08 in algorithm 2734 閱讀 tarjan演算法的步驟是 當dfs到節點u時 1 在並查集中建立僅有u的集合,設定該集合的祖先為u 1 對u的每個孩子v 1.1 tarjan之 1.2 合併v到父節點u的集合,確保集合的祖...