樹鏈剖分入門

2022-04-10 02:38:24 字數 829 閱讀 2367

我學的學習資料: 和 ppt

樹鏈剖分可以解決很多問題,輔助一些線段樹之類的資料結構可以解決一些樹上修改的問題。還可以求lca,不過複雜度比rmq實現的lca多乙個log。

下面是樹鏈剖分實現的lca:

1

const

int maxn = 5e4 + 10;2

struct

data edge[maxn << 1];5

inthead[maxn] , cnt;

6int

par[maxn] , dep[maxn] , top[maxn] , id[maxn] , dis[maxn] , size[maxn] , son[maxn];78

void

init()

1213 inline void add(int u , int v , int

cost)

19//

求size , par , son , dep

20void dfs_1(int u , int p , int

d) 32}33

//求top , id

34void dfs_2(int u , int p , int t) 45}

46//

樹鏈剖分求lca的複雜度是(nlognlogn),建議用rmq求lca

47int lca(int u , int

v) 54

else58}

59if(dep[u] >= dep[v]) //

在相同的鏈上

60return

v;61

return

u;62 }

樹鏈剖分入門

例題 poj 3237 bzoj 3083 bzoj 3531 bzoj 3589 bzoj 3626 將樹上問題通過dfs序的性質轉換為區間問題,從而對樹上修改時就可轉化為相應的區間修改。再通過引入重兒子,重鏈一系列概念將時間複雜度也變成了可以接受的層次 通過兩次dfs求出樹上一系列的資訊 voi...

樹鏈剖分入門

將樹分割成多條鏈,然後用線段樹等來維護這些鏈。樹鏈剖分的分割標準 連線乙個節點的子樹中的 重兒子 也就是結點最多的兒子,依次連下去。定義 重兒子 子樹節點的兒子 輕兒子 除了重兒子以外的兒子 重邊 父節點與重兒子組成的邊 輕邊 除重邊以外的邊 重鏈 重邊連線而成的鏈 輕鏈 輕邊連線而成的鏈 鏈頭 一...

演算法入門 樹鏈剖分 輕重鏈剖分

目錄 3.0 求 lca 4.0 利用資料結構維護資訊 5.0 例題 參考資料 資料結構入門 線段樹 發表於 2019 11 28 20 39 dfkuaid 摘要 線段樹的基本 建樹 區間查詢 單點修改 及高階操作 區間修改 單點查詢 區間修改 區間查詢 標記下傳 標記永久化 閱讀全文 樹鏈剖分用...