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