CF600E 輕重鏈剖分

2021-10-01 04:12:21 字數 728 閱讀 8227

傳送門

對於每乙個點x,可以分別進行o(n)的搜尋,但這會超時。可以採用樹鏈剖分(輕重鏈剖分)進行優化,對於每個x,長久記錄它的重兒子,每次只搜尋輕兒子,就可以將演算法的複雜度優化到 o(nlogn)。

#include

using

namespace std;

typedef

long

long ll;

ll read()

const

int n=

100005

;ll n,ans[n]

;vector<

int> g[n]

;map<

int,ll> a[n]

,f[n]

;void

dfs(

int x,

int y)}}

map<

int,ll>

::iterator it=f[x]

.end()

; it--

,ans[x]

=it-

>second;

}int

main()

dfs(1,

0);for

(int i=

1;i<=n;i++

)printf

("%lld "

,ans[i]);

return0;

}

輕重鏈剖分

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

輕重鏈剖分

目錄樹剖完就是線段樹題了qwq 沒了題外話 鴿說叫 he y light decomposition 或 he y path decomposition 正確叫法 不是 這是真的 乙個節點子樹大小最大的兒子叫重兒子 節點到重兒子的邊叫重邊 一堆重邊叫重鏈 重兒子優先 dfs,於是重鏈連續,每條鏈可以...

模板 輕重鏈剖分

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