[學習筆記] kruskal重構樹
阿新 • • 發佈:2021-08-29
如果在一張圖上要解決的問題與圖的連通性有關,且圖上邊的作用僅是改變連通性(不直接對答案產生貢獻)並有一定限制,我們便可以考慮kruskal重構樹
具體來說,只保留一些較優(通常表現為限制較小)的邊,用特殊的手法按限制從小到大不斷加邊,直到圖完全連通,搞一顆樹
為了方便,每次加入一條邊時,把這條邊做成帶權的點,權值設為邊的限制,然後將左右兒子設為這條邊本來連線的點此時所屬子樹的根
這樣我們就建出一顆具有優美性質的二叉樹,也就是kruskal重構樹啦awa
優美的性質是啥?一個點的權值一定 \(\geq\) ta子樹中任意點的權值,樹的葉子節點為確實存在的點(稱之為實點)
現在給定一個限制,詢問某點在此限制下所能到達的點的資訊,是不是很好做?
我們從某個實點帶著限制往上跳,跳到最高的滿足限制的點,此時這個點的子樹就是我們要詢問的集合
然後跳的過程可以帶個倍增,詢問的資訊可以用奇技淫巧直接在樹上維護(因為要提前對整棵樹處理,所以要離線),這就OK啦
樹的規模一般為 \(O(n * 2)\),時間就視情況而定啦qwq
例題:(打√的是蒟蒻博主做過的QWQ)
P4768 √
P4197 √
P3224 √ (別問我平衡樹啟發式合併題為什麼要用kruskal重構樹做,問就是想水題解