5874. 【NOIP2018提高組模擬9.18】小p的決心(倍增LCA 離線 或 線上)
阿新 • • 發佈:2018-12-10
Problem
- 維護一個至多 節點的森林, 個操作,支援連邊和查詢兩點 .
Data constraint
Solution
1. 離線做法
-
首先考慮比較簡單的離線做法.
-
我們可以考慮先把最終的森林給構出來.
-
再每棵樹上任意找一點 作為原始根,然後求個倍增陣列.
-
然後掃一遍詢問,並查集維護到每一個詢問操作時,兩個點 所在的樹的真正根 .
-
那麼答案其實就是擁有 兩兩 的最大深度的那個點.
-
具體證明可以分類討論,這是一種很經典的套路.
-
其實這種套路在5783. 【省選模擬2018.8.8】樹 這道題裡也出現了,當時我亂搞搞出來了,但這一次卻沒有想到.
2.線上做法
-
為了使自己印象更深刻一些,下次遇到這種求LCA的題目能更靈活變通,我還打了一下線上做法.
-
不難發現離線做法的時間複雜度實際上就是找 的時間複雜度,這個可以在 時間內做到.
-
但如果強制線上,我們需要怎樣做呢?
-
很容易想到的是啟發式合併倍增陣列.
-
但問題是合併後很有可能根會發生改變,也就是倍增的根與當前真正的根不一樣.
-
顯然,這就是上面離線所說的,需要做的3次LCA.
-
時間複雜度近似 ,實際上遠遠比這小.