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)\)这条链扣掉,各个子树的权值之和的平方。

这里是一个树链剖分的技巧。

就是对每个节点,分别维护轻儿子的和平方、重儿子的和平方。

对树上一条链,往上跳重儿子链的时候,就直接线段树区间求和。因为这条链上的节点都是父亲节点的重儿子,线段树维护的本来就已经是答案了。

剩下周赛回来补。

posted @ 2021-10-23 16:41  zlc0405  阅读(57)  评论(0编辑  收藏  举报