1. 程式人生 > >克魯斯卡爾重構樹小結

克魯斯卡爾重構樹小結

.org work 根節點 問題 net 重構 lca lin 創建

https://zybuluo.com/ysner/note/1239639

定義

克魯斯卡爾重構樹可以維護諸如“查詢從某個點出發經過邊權不超過\(w\)的邊最遠所能到達的節點”或“從某點到某點所有路徑的最長邊的最小值”之類的問題。

總之,算法處理範圍有限,且多為同時包含“最大最小”、離線可二分的題目。
可與數據結構結合,以維護更復雜的數據結構。
它可以在線回答,復雜度為\(O(logn)\)

構建

把邊權從大到小排序,用給兩端點(兩個聯通塊)新建一個權值為邊權的共同父親,來代表給它們加了一條邊。

性質

  • 樹上除葉子結點以外的點都對應著原來生成樹中的邊,葉子結點就是原來生成樹上的節點。
  • 由於新點的創建順序與原來生成樹上邊權的大小有關(從大到小),可以發現,從每個點到根節點上除葉子結點外按順序訪問到的點的點權是單調的。
  • 出於\(kruskal\)算法貪心的性質,兩個點\(u\)\(v\)\(lca\)的點權就對應著它們最小生成樹上的瓶頸。
  • 實際上這棵樹就是一個二叉堆。

    相關題目

  • [X] [bzoj3732]network
  • [X] [NOI2018]歸程
  • [ ] [ONTAK2010]Peaks加強版

克魯斯卡爾重構樹小結