题意
给出一棵 N N N个节点的无根树,节点 i i i有权值 V i V_i Vi。
现在有 M M M次操作,操作有如下两种:
1 x y 1 x y 1xy将节点x的权值 V x V_x Vx修改为 y y y
2 2 2 选择一个连通块(也可以不选择),使得点权和最大,输出这个点权和。
题解
直观的想法是ddp,但代码复杂度较高且常数较大。
考虑一条链,就直接用线段树维护连续区间和的最大值。推广到树上,树剖一下,利用每个点到根的路上不会有超过log条轻边的性质,维护每个点为根,在它的轻子树内的最大联通块,对每一条重链都在线段树按照链的方法查询,复杂度即可做到
O
(
n
l
o
g
2
n
)
O(nlog^2n)
O(nlog2n)。