//點和線段樹都從1開始
//邊使用vector
vectorg[maxn];
int dfs_clock,que[maxn*2
],num[maxn],iii[maxn],b[maxn],a[maxn],top[maxn],deep[maxn],fa[maxn],idx[maxn];
//採用靜態鍊錶
//a[i] 是初始時樹上每個點的權值
//b[i] 是經過bfs後每個點的權值
//idx[i] 是每個點在全域性線段樹中的下標
void
build_list()
}memset(num,
0, sizeof
num);
for(int i = n-1; i >= 0; i--)
for(int i = 1; i <= n; i++)
top[
1] = 1
;
for(int i = 1; i < n; i++)
memset(iii,
0, sizeof
iii);
ft = 0
; dfs_clock = 0
; que[++ft] = 1
; idx[
1] = ++dfs_clock;
b[1] = a[1
];
while
(ft)
}}
樹鏈剖分 模板
class match node a n struct no no aa n 4 void init void addpage int x,int y void dfs int s,int faa,int h 根節點,父節點和深度的 if max 0 son s sign void dfs2 int...
模板 樹鏈剖分
define maxn 50010 define l u u 1 define r u u 1 1 寫在類裡面爆棧 int n,m,q int tim 時間戳 int num maxn 樹上每個節點的初始值 int siz maxn siz u 表示以u為根的子樹的節點數 int top maxn ...
樹鏈剖分模板
點權模板 1 m a b c將節點a到節點b路徑上所有點都染成顏色c 2 q a b詢問節點a到節點b路徑上的顏色段數量 連續相同顏色被認為是同一段 如 112221 由3段組成 11 222 和 1 const int n 100100 struct edge g n 2 int cnt,head...