给出一颗带点权的树。
支持两种操作:
1)单点修改点权。
2)输入(u,v),输出(sum_{i=1}^nsum_{j=1}^nf(i,j))
如果(i,j)这条路径和(u,v)有交点,(f(i,j)=w_iw_j)。
对(i,j)的乘积
做法:
答案相当于权值之和的平方,减去把((u,v))这条链扣掉,各个子树的权值之和的平方。
这里是一个树链剖分的技巧。
就是对每个节点,分别维护轻儿子的和平方、重儿子的和平方。
对树上一条链,往上跳重儿子链的时候,就直接线段树区间求和。因为这条链上的节点都是父亲节点的重儿子,线段树维护的本来就已经是答案了。
剩下周赛回来补。