模板 樹鏈剖分

2021-06-27 05:47:06 字數 974 閱讀 6952

#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]; //樹鏈上深度最小的點

int son[maxn]; //重兒子

int dep[maxn]; //深度

int tid[maxn]; //節點的時間戳

int _tid[maxn]; //tid[i]=j表示時間戳為i的節點是j

int father[maxn]; //父節點

bool vis[maxn];

vectoredge[maxn];

void init(int n)

} void addedge(int u, int v) //無根樹加雙向邊

//樹鏈剖分 dfs1(1,0)

void dfs1(int u, int pre)

} } //注意清空vis,dfs2(1,1)

void dfs2(int u, int tp)

} void update(int u, int l, int r, int v); //線段樹的更新函式

void change(int x, int y, int val)

if(dep[x] > dep[y]) //同一條重鏈上深度小的tid小

swap(x, y);

update(1, tid[x], tid[y], val);

}

//線段樹部分

樹鏈剖分 模板

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...

樹鏈剖分模板

點權模板 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...

模板 樹鏈剖分

如果你會了樹上dp,還會線段樹 沒錯!我都會啊!那你為什麼寫不出樹鏈剖分?by勇者和路由器的對話,今天二位仍然過得十分愉快 bzoj1036 zjoi2008 樹的統計 題目描述 一棵樹上有n個節點,編號分別為1到n,每個節點都有乙個權值w。我們將以下面的形式來要求你對這棵樹完成一些操作 i.cha...