學習筆記 Kruskal重構樹

2022-02-02 06:16:10 字數 966 閱讀 5967

kruskal 求最值生成樹時需要通過邊合併兩個之前不相連的連通塊

這時候通過建立虛點表示兩點之間有連邊,同時將邊的資訊記錄到虛點上

所以如果查詢原圖上的兩點間路徑上的極值,可以考慮維護重構樹路徑上點權的資訊

**大概長成這樣子,變數名還是比較大眾化的:

nodes=n;

for(int i=1;i<=m;++i)

建出來的樹顯然是個二叉樹,不過另外有一些性質:

\(1.\) 每個點到根經過路徑上的點權是單調的,因為是 kruskal

\(2.\) 樹上除了葉子節點是對應原來圖上的點之外,別的所有點是對應樹上的邊

首先發現這裡限制了乙個維度(海拔)

就是先按照海拔從大到小排個序,扔到重構樹裡面

這裡的重構樹是乙個小根堆,如果走到小於海拔限制的就不能走了

每次查詢,直接從重構樹上面往上走,走到那個超過海拔限制的點結束

這部分需要樹上倍增

然後該點的子樹裡面的所有點都是可以直接坐車到的

然後考慮的就是找到這些點裡面到 \(1\) 距離的最小值

直接 \(dfs\) 解決掉就好了

首先建重構樹維護可以走到的點,建乙個大根的,乙個小根的

然後在以兩個點為根的子樹裡面求交集

如果有交集,那麼就是 \(1\),否則就是 \(0\)

樹的子樹求交集問題?

先求出來 \(dfs\) 序,然後以 \(d_a\) 為下標,\(d_b\) 為權值建主席樹

然後查詢的本質就是跳 \(father\) 和二維數點,使用你喜歡的資料結構維護即可

在演算法講述的過程中提到了乙個叫做點到根的路徑上權值單調的性質

其實kruskal重構樹是樹上 cartisian樹 的一種常見形式

先建出來兩個大根小根重構樹(原樹上邊權就是較大點點權),這裡可以簡潔地正序、倒序掃瞄

本題所求也就是說在兩個樹上祖孫關係相反的點對數,使用bit求解即可

Kruskal重構樹 學習筆記

kruskal重構樹 性質 1.是乙個小 大根堆 由建樹時邊權的排序方式決定 2.lca u,v 的權值是原圖u到v路徑上最大 小邊權的最小 大值 由建樹時邊權的排序方式決定 kruskal重構樹 建樹 模仿kruskal的過程,先將邊權排序 排序方式決定何種性質接下來說明 依次遍歷每條邊 若該邊連...

kruskal重構樹學習筆記

8102ioncc 中考到了,本蒟蒻不會,所以學一下。kruskal 求最小 大 生成樹,樹上求 lca kruskal 重構樹可以解決瓶頸路問題 如 noip2013 d1t3 貨車運輸,可以當做模板題來做,本文中也將此題作為例題 我們來思考一下 kruskal 求最小 大 生成樹的過程 後文中以...

Kruskal重構樹學習筆記

這裡是kruskal重構樹學習筆記。kruskal重構樹,是用於求出有關一張圖中,某點僅經過邊權 leq 某個值 v 的邊所得到的子圖的有關資訊的工具。但事實上,其應用還有更多。我們先講述其構造方法 將所有邊按照邊權遞增排序。依次列舉每一條邊。假如此時邊的兩個端點處於兩個不同集合中,按照常規krus...