1. 程式人生 > >(待完成)qbxt2019.05 總結8 - 樹剖

(待完成)qbxt2019.05 總結8 - 樹剖

數據結構 起點 完成 具體步驟 劃分 節點 多條 轉化 樹狀數組

樹鏈剖分,指一種對樹進行劃分的算法,它先通過輕重邊剖分將樹分為多條鏈,保證每個點屬於且只屬於一條鏈,然後再通過數據結構(樹狀數組、SBT、SPLAY、線段樹等)來維護每一條鏈。

具體步驟:

第一遍dfs求出樹每個結點的深度deep[x],其為根的子樹大小size[x],以及每個點的父親fa[x]。

第二遍dfs以根節點為起點,先dfs其兒子中size最大的兒子,相當於重邊,之後dfs其它輕兒子。

在dfs的過程中求出每個節點的dfs序以及沿著重鏈向根最遠到達哪個點,每條重鏈的dfs序就相當於一段區間,樹上問題轉化為區間問題。

根據不同題目使用維護區間的數據結構即可。

(以上摘自lyd課件)

(待完成)qbxt2019.05 總結8 - 樹剖