如果你使用连续两遍 DFS 的方法确定重心以及以其为根的子树大小,即类似
X(v, u, s[v]), X(R, 0, s[v])
的写法,那么建点分树时,把 u 子树到 u 的贡献的树状数组开到 su+1,把 u 子树到 fau 的贡献的树状数组开到 su+2。
因为这个树状数组下标从 0 开始,所以修改 / 查询时要后移一位,变成从 1 开始。
则下标范围为 1∼maxdep+1,vector 大小要开到 maxdep+2。
所以 u 子树到 u 的贡献的树状数组要开到 su+1,u 子树到 fau 的贡献的树状数组要开到 su+2
查询参数 x 超过树状数组大小 p 时,将 x 与 p 取 min。