輕重鏈剖分

2022-09-20 07:24:12 字數 1004 閱讀 1132

目錄樹剖完就是線段樹題了qwq

沒了題外話

**鴿說叫 he**y-light decomposition 或 he**y path decomposition .

正確叫法(不是):

這是真的:

乙個節點子樹大小最大的兒子叫重兒子 .

節點到重兒子的邊叫重邊 .

一堆重邊叫重鏈 .

重兒子優先 dfs,於是重鏈連續,每條鏈可以拆成若干條重鏈和雜邊 .

每次走輕兒子子樹大小至少除以二,於是每條鏈可以拆成 \(\log\) 條重鏈,用線段樹維護 dfs 序就可以做到 \(\log^2\) .

這就是輕重鏈剖分的基本原理 .

loj139 樹鏈剖分

維護一棵 \(n\) 個點有點權的樹,支援

樹上兩點間路徑唯一,於是路徑啥事沒有

換根對子樹的影響可以看 樹 社論 的做法,就是拆成子樹補啥的 .

於是做完了 .

輕重鏈剖分通過兩次 dfs 完成,非常好理解吧 .

code:

void dfs1(int u)

}void dfs2(int u, int t)

查詢修改類似

ll query(int u, int v)

else

fu = top[u]; fv = top[v];

} if (dfn[u] > dfn[v]) swap(u, v);

return ans + t.query(1, dfn[u], dfn[v]);

}

可以精簡**です

dfs 序板子,略過 .

welcome to oi!

——《segment tree beats!》

應該是圓方樹解決吧 .

輕重鏈剖分

樹鏈剖分是一種將樹轉化為一條鏈的演算法,通常和線段樹,樹狀陣列,dp等針對鏈的演算法結合使用。正如題目所說,本文只講輕重鏈剖分 預處理首先扔出乙個定理 樹中任意一條路徑均可以拆分成一條鏈上 o log n 個連續區間。證明 構造 乙個dfs序就行了 但是實際 實現中,一般都是優先遍歷重兒子,這樣遍歷...

模板 輕重鏈剖分

目錄後記 模板 輕重鏈剖分 傳送門總的來說,就是乙個不難理解,碼量 的東西 推幾篇題解,講得不錯 線段樹 必備 倍增lca 可以幫助理解,不會應該也可以 鏈式前向星 存圖,不會有人不會吧 重兒子 子樹結點最多的兒子 重邊 某個點到它的重兒子連成的邊 重鏈 重邊連成的鏈 輕兒子 除重兒子外的其它兒子 ...

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

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