ABC298Ex
水紫。
多次询问 \(L,R\),求出 \(\sum\limits_{i=1}^n \min(d(i,L),d(i,R))\)。
不失一般性的令 \(del_L\le del_R\)。
分几部分考虑。
- \(L\) 或 \(R\) 的子树中。
预处理 \(f_i\) 代表 \(i\) 的子树中的点到 \(i\) 的距离和,\(s_i\) 代表 \(i\) 的子树大小。
转移方程:\(f_i=\sum\limits_{j\in son_i}f_j+s_j\),\(s_i=1+\sum\limits_{j\in son_i}s_j\)。
该部分的答案为 \(f_L+f_R\)。
- 不在 \(L\) 和 \(R\) 的 \(\operatorname{lca}\) 的子树中。
令 \(k\) 为 \(\operatorname{lca}(L,R)\)。
该部分的路径一定是形如 \(i\rightarrow k\rightarrow L/R\)。后半部分取决于 \(d(k,L)\) 和 \(d(k,R)\) 谁更小,令 \(m=\min(d(k,L),d(k,R))\)。
前半部分是简单的换根 dp,令 \(g_i\) 代表不在 \(i\) 的子树中的点到 \(i\) 的距离和。
转移方程:\(g_i=g_{fa}+(n-s_{fa})+f_{fa}-(f_p+s_p)+s_{fa}-s_p=g_{fa}+f_{fa}+n-f_p-2\times s_p\)。
该部分答案为 \(g_k+(n-s_k)\times m\)。
- 在 \(L\rightarrow R\) 路径上的点的子树中。
这些点一定会先移动到路径上的某个点,然后移动到 \(L/R\),设移动到 \(R\) 的判断距离阈值为 \(B\),利用倍增求出 \(R\) 的树上 \(B\) 级祖先 \(x\),则对原树上 \(L\rightarrow k\rightarrow R\) 分成 \(L\rightarrow y\) 和 \(x\rightarrow R\) 两部分考虑,其中 \(y\) 是 \(x\) 在链上的下一个点。
注意到 \(y\) 仍然可能位于 \(k\rightarrow R\) 这条链上,这也说明 \(L\rightarrow y\) 并不是一条深度递减的链,因此将 \(L\rightarrow y\) 拆成 \(L\rightarrow k\) 和 \(y\rightarrow k\) 两条链,这样我们只需要对三条直上直下的链处理即可。
注意到这部分已经将第一部分的约束规约,因此可以直接做该部分的约束。

浙公网安备 33010602011771号