dfs1函数:
① dep【u】 = dep【v】 + 1; 容易将u,v写反;
② siz【u】 += siz【v】;要放在递归调用之后并且不能写反;
线段树push_down函数:
若是“加上某个数”则为'+=';若为“修改为”则为' = ';
query_chain/modify_chain函数:
void modify_chain(int u,int v,int delta){
while(top[u]!=top[v]){
if(dep[top[u]]<dep[top[v]]) swap(u,v);//要跳u,top【u】深度要调成大的
modify(1,1,idc,in[top[u]],in[u],delta);
u = fat[top[u]];
}
if(dep[u]>dep[v]) swap(u,v); // 修改u到v,dep【u】< dep【v】
modify(1,1,idc,in[u],in[v],delta);
}long long query_chain(int u,int v){
long long ans = 0;
while(top[u]!=top[v]){
if(dep[top[u]]<dep[top[v]]) swap(u,v);
ans += query(1,1,idc,in[top[u]],in[u]);
u = fat[top[u]];
}
if(dep[u]>dep[v]) swap(u,v);
ans += query(1,1,idc,in[u],in[v]);
return ans;
}