大佬部落格:
模板題:
重兒子(非葉子結點):它某個點的作為兒子,且是兒子中子樹結點數最多的兒子。
輕兒子(非葉子結點):非重兒子
重邊:乙個父親連線他的重兒子的邊稱為重邊
輕邊:非重邊
重鏈:相鄰重邊連起來
連線乙個重兒子
每個葉子結點,如果是輕兒子,則有一條以自己為起點的長度為1的鏈
把csdn當做雲盤
模板
#include
using
namespace std;
#define for0(a,b) for(int i = a; i < b; ++i)
#define fore(a,b) for(int i = a; i <= b; ++i)
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
typedef
long
long ll;
typedef pair<
int,
int> pii;
const
int maxn =
2e5+5;
// 變數
int n,m,mod;
vector<
int> g[maxn]
;int w[maxn]
;// 點權值
// 線段樹
int val[maxn<<2]
, lazy[maxn<<2]
;// 樹鏈剖分
int son[maxn]
, id[maxn]
, fa[maxn]
,dep[maxn]
,siz[maxn]
,top[maxn]
,wt[maxn]
;int cnt;
//------------------------------
// 線段樹部分
void
pushup
(int rt)
void
pushdown
(int rt,
int l,
int r)
}void
build
(int l,
int r,
int rt)
int mid =
(l+r)
>>1;
build
(lson)
;build
(rson)
;pushup
(rt);}
void
update
(int l,
int r,
int k,
int l,
int r,
int rt)
int mid =
(l+r)
>>1;
pushdown
(rt,l,r)
;update
(l,r,k,lson)
;update
(l,r,k,rson)
;pushup
(rt);}
intquery
(int l,
int r,
int l,
int r,
int rt)
int mid =
(l+r)
>>1;
int res =0;
pushdown
(rt,l,r)
; res +
=query
(l,r,lson)
; res %
= mod;
res +
=query
(l,r,rson)
; res %
= mod;
pushup
(rt)
;return res;
}//------------------------------
//樹鏈剖分,操作
// 求和
intqrange
(int x,
int y)
// 在同一條鏈上了
if(dep[x]
> dep[y]
)swap
(x,y)
; ans +
=query
(id[x]
,id[y],1
,n,1);
ans %
= mod;
return ans;
}// 更新
void
updrange
(int x,
int y,
int k)
if(dep[x]
> dep[y]
)swap
(x,y)
;update
(id[x]
,id[y]
,k,1
,n,1);
}int
qson
(int x)
void
updson
(int x,
int k)
//------------------------------
// 樹鏈剖分, 處理鏈
// u 當前結點,f父親,deep深度
void
dfs1
(int u,
int f,
int deep)}}
// u 當前結點,topf當前鏈的最頂端的節點
void
dfs2
(int u,
int topf)
}//------------------------------
intmain()
dfs1
(rt,-1
,1);
dfs2
(rt,rt)
;build(1
,n,1);
int opt,x,y,z;
for(
int i =
0; i < q;
++i)
else
if(opt ==2)
else
if(opt ==3)
else
if(opt ==4)
}return0;
}
樹鏈剖分 模板
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...