Kruskal 重構樹

superl61發表於2024-09-22

\(Kruskal\) 重構樹

解決的基本問題:一張圖中 \(u\)\(v\) 路徑上最大邊的最小值。

構建:在從小到大加邊的過程中,如果 \(u\), \(v\) 不在一個並查集中,就建立一個新的節點 \(X\),並將 \(fu\)\(fv\) 分別作為 \(X\) 的左右兒子, \(X\) 的點權就是這條邊的邊權。這樣樹,我們稱為 \(Kruskal\) 重構樹。

\(Kruskal\) 重構樹有如下重要性質:

  • \(Kruskal\) 重構樹是一顆二叉樹。
  • 兩點 \(u\) 和 $v $ 的最近公共祖先 $ LCA(u,v)$ 的點權為原圖中從 $u $ 到 \(v\) 滿足最大邊最小的路徑上的邊的最大值。
  • 任意點的權值大於左右兒子的權值,是一個大根堆(若邊權從大到小排序,則為小根堆)。
  • \(Kruskal\) 重構樹整棵樹的根就是最後所建的結點。
  • 若原圖不連通,即建出的是一個森林,那麼就遍歷每個節點,找到其並查集的根作為其所在樹的根。

SOJ - Network:重構樹板子

SOJ - 神奇的花園:重構樹+啟發式合併

相關文章