剖分後的樹有如下性質(易證):
性質①: 如果 (v,u) 為輕邊,則 size[u]∗2性質②: 從根到某一點的路徑上輕鏈、重鏈的個數都不大於 logn。
**:
#include #include #include #include #include #include #include #include #include #include #include #include typedef long long ll;
#define inf 0x3f3f3f3f
const int maxn=1e5+10;
const int maxn=1e3+10;
const long long mod=100000000;
using namespace std;
int head[maxn],cnt;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
struct edge
edge[maxn*2];
void addedge(int u,int v,int w)
struct tree
tree[maxn*2];
int f[maxn];//儲存父節點
int depth[maxn],size[maxn];//儲存節點數
int son[maxn];//儲存重兒子
int rk[maxn];//dfs序在樹上對應的頂點
int top[maxn];//儲存當前節點所在鏈的頂點節點
int id[maxn];//dfs序編號
int num;
int a[maxn],n;
void dfs1(int u,int pre,int dep)
}}void dfs2(int u,int t)//鏈結重鏈
}}void push_up(int rt)
void build(int l,int r,int rt)
int m=(l+r)>>1;
build(lson);
build(rson);
push_up(rt);
}void push_down(int rt)
}void updata(int l,int r,int c,int l,int r,int rt)
push_down(rt);
int m=(l+r)>>1;
if(r>m) updata(l,r,c,rson);
if(l<=m) updata(l,r,c,lson);
push_up(rt);
}int query(int l,int r,int l,int r,int rt)
push_down(rt);
int m=(l+r)>>1;
int ans=0;
if(r>m) ans+=query(l,r,rson);
if(l<=m) ans+=query(l,r,lson);
push_up(rt);
return ans;
}int sum(int x,int y)
else
fx=top[x],fy=top[y];
}ans+=query(min(id[x],id[y]),max(id[x],id[y]),1,n,1);
return ans;
}void change(int x,int y,int c)
else
fx=top[x],fy=top[y];
}updata(min(id[x],id[y]),max(id[x],id[y]),c,1,n,1);
}void init()
int main(int argc, char const *argv)
for(int i=1;idfs1(rt,0,1);
dfs2(rt,rt);
build(1,n,1);
while(m--)
else if(op==2)
else if(op==3)
else if(op==4)
}return 0;
}
樹鏈剖分 模板
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...