[DS记录]P7581 「RdOI R2」路径权值(distance)

command_block

2021-07-19 22:30:01

Personal

**题意** : 给你一棵 $n$ 个点的边带权有根树,根节点为编号为 $1$ 的节点。 定义 $u$ 的 $\text{k-}son$ 为 $u$ 子树中向下经过 $k$ 条边能到达的所有点。 $m$ 次询问点 $u$ 的 $\text{k-}son$ 两两之间距离的和。答案对 $10^9+7$ 取模。 $n,m,k\leq 10^6$ ,时限$\texttt{2s}$。 ------------ 考虑合并两个 $\rm lca$ 为 $t$ 的点集 $S_1,S_2$ : $$ \begin{aligned} {\rm Ans}_{S_1+S_2}&={\rm Ans}_{S_1}+{\rm Ans}_{S_2}+\sum\limits_{u\in S_1,v\in S_2}dis(u,v)\\ &={\rm Ans}_{S_1}+{\rm Ans}_{S_2}+\sum\limits_{u\in S_1,v\in S_2}dep_u+dep_v-2dep_t\\ &={\rm Ans}_{S_1}+{\rm Ans}_{S_2}+|S_2|{\rm Sdep}_{S_1}+|S_1|{\rm Sdep}_{S_2}-2|S_1||S_2|dep_t \end{aligned} $$ 记 $c[u][k]$ 为 $u$ 的 $\text{k-}son$ 的个数,记 $sd[u][k]$ 为 $u$ 的 $\text{k-}son$ 的深度和,$f[u][k]$ 为 $u$ 的 $\text{k-}son$ 的距离和(答案)。 根据上面的式子,容易长剖维护,复杂度 $O(n+m)$。 ```cpp ```