列如这个图
seq数组为 1 2 5 3 4 6 7
in数组为1 2 4 5 3 6 7
out数组为7 3 4 3 7 6 7
如果改一个点x的子树上的值,即区间更改seq数组中【in[x],out[x]】的值。
一般可以存一个pos数组,pos[i]代表i这个数在seq数组的位置,即如果说更改3这个节点的权值,即在线段树中更改pos[3]即4的权值即可,如果更改3的整个子树,那么就是更改区间[in[pos[3]],out[pos[3]]]即可。
pos数组为 1 2 4 5 3 6 7
void dfs(int now,int fa,int deep){
seq[++cnt]=now;
in[now]=cnt;
for(i=0;i<v[now].size();i++){
int to=v[now][i];
if(to!=fa){
dfs(to,now,deep+1);
}
}
//seq[++cnt]=now;
out[now]=cnt;
}