1
我有一棵樹。我要回答的查詢,如:路徑 如何使用HLD查找LCA?
我使用重輕分解上的路徑
- 增值。樹中有
n
個節點和m
查詢。對於HLD,當我知道最低公共祖先時,我可以將u
和v
的任何查詢分成兩個不同的查詢:從u
到lca
和v
到。因此,查詢將在O(log^2n)
時間(log
從u
和v
到lca
和log
爲重路徑上的分段樹)上回答。如您所知,HLD內置於
O(n)
時間,因此總時間爲O(n + m*log^2n)
。我的問題是如何使用已建立的HLD來查找LCA。我無法發明算法。我可以使用二進制爬行來獲得LCA,但需要預處理
O(nlogn)
,這會使漸近行爲變得更糟。我也可以使用範圍最小查詢,這不會浪費時間,但我想在此過程中使用HLD。感謝您的任何想法!
謝謝!我在做dfs時沒有考慮預處理時間,它解決了這個問題 –