長鏈剖分總結

2022-05-07 20:27:10 字數 566 閱讀 4447

長鏈剖分和輕重鏈剖分十分相似,都是將一棵樹節點的資訊分成多條鏈的資訊,但是前者是以深度剖分,後者則是以子樹大小來剖分。

同時長鏈剖分還借鑑了$dsu\;on\;tree$的一些$trick$使得它能十分高效地合併子樹資訊。

破天荒地寫了證明

所有鏈長度之和為節點數

證明:

任意乙個點$k$級祖先所在長鏈的長度一定大於等於$k$

證明:

任意乙個點跳重鏈到根所用的次數不超過$\sqrt n$

證明:

首先對樹進行長鏈剖分,記錄每個節點所在的鏈的鏈頂,然後按深度記下每條鏈中的節點和這條鏈的長度個數個祖先,再預處理倍增陣列代表$2^k$祖先。根據性質二,我們跳到節點的大於$\frac k2$次祖先,我們可以通過之前預處理出的鏈頂祖先中找到$k$及祖先,感性理解分析可得,第一次跳$highbit(k)$次祖先最快,複雜度$o(1)$

總複雜度$o(nlogn)+o(詢問次數)$

**在這裡

這個題

長鏈剖分隨想

之前寫了那麼長一篇blog 現在不如寫篇小短文 說一下另一種樹鏈剖分方法 長鏈剖分的事情。它可以比重鏈剖分更快地完成一些東西。樹鏈剖分的原始版本重鏈剖分非常經典,這裡就不從頭介紹了。原本的剖分方法是按照子樹大小剖分,與子樹點數最多的兒子連成鏈,所以叫做重鏈剖分 然後顯然就有乙個點到根的路徑上至多 o...

長鏈剖分隨想

之前寫了那麼長一篇blog 現在不如寫篇小短文 說一下另一種樹鏈剖分方法 長鏈剖分的事情。它可以比重鏈剖分更快地完成一些東西。樹鏈剖分的原始版本重鏈剖分非常經典,這裡就不從頭介紹了。原本的剖分方法是按照子樹大小剖分,與子樹點數最多的兒子連成鏈,所以叫做重鏈剖分 然後顯然就有乙個點到根的路徑上至多 o...

關於長鏈剖分

看這樣乙個題 dsu on the tree 給你一棵樹,每個節點有一種顏色,問你每個子樹x的顏色數最多的那種顏色,如果顏色數相同,那麼種類數相加。考慮最暴力的暴力,對於每個點遍歷它的子樹,統計答案,然後再撤銷。但是這樣太傻了,每個點顯然可以繼承乙個兒子的資訊,我們選擇繼承它的重兒子的資訊,只 df...