P14902 题解

· · 题解

经典结论题。

一棵树上,设 S_1,\dots,S_k 按 \operatorname{dfn} 排列,令 S_{k+1}=S_1,记

D=\sum_{i=1}^{k}\operatorname{dist}(S_i,S_{i+1})

其中 D=2|E(T_S)|,其中 T_S 是包含 S 的最小连通子树,E(T_S) 表示子树 T_S 包含的边数。

用 std::set 维护每个颜色的点集是容易的,主要关心证明。

主要需要证明的是 D=2|E(T_S)|。

任取树边 e,删去后树分成两侧 A,B。

因此 D=\sum_{e\in E(T_S)}2=2|E(T_S)|。