貌似这道题暴力加玄学优化就可以AC?
下面是正解:
1.树链剖分:
我们在u到v之间都放一个糖果,可以将松鼠它家u到v的糖果数都加1。每一次将a[i]到a[i+1] (a数组是访问顺序)的节点加1,可以用树链剖分来维护。查询只需要查每个点的权值就可以了。(貌似该题比树剖板子还板子?)
2.树上查分:重点来了!(敲黑板!!!)
本题的题意便是统计一条路径上所有点的经过次数。
已知原数组a[i]表示每个点的点权,设差分数组s[i]=a[i]-sum(a[j])(j为i的每个直接相连的儿子);
叶子节点的b[i]恰好为该点点权a[i];
对于任意一个节点k,a[k]=以k为根节点的子树中所有s[i]之和。
设差分数组s[],对于每次操作,
s[u]++;
s[v]++;
s[LCA(u,v)]--;
s[fa[LCA(u,v)]]--;
这是点权的情况,如果是边权,只需要把一个点到父亲的边权赋给自己当作点权,
然后当作点权的情况做就好了,细节需要处理一下。
原文:https://www.cnblogs.com/kamimxr/p/11279041.html