#JSUTCPC2026H. Poem of Sylvas —— 万木诗

Poem of Sylvas —— 万木诗

题面描述

我沉底的一生、浪子与云霞

如阅历浅浅的游鸟,耽于河岸

是呢喃的风雨外,密林耳语:

寻见她,便寻见春日

是故层云蔽日,万木成诗

梦醒时,当春绿过原野,寥落的新叶芳菲外生机一片

春天来了,Paper 想要把一棵树保存起来,她知道存储的成本取决于树的直径[1]。为了降低存储空间保证不折断枝条,她的目标是首先尽可能地缩小直径,可以对这棵树执行以下操作:

  • 选取两个顶点 ss 和 tt,设从 ss 到 tt 的简单路径[2]上的顶点序列为 v0,v1,…,vkv_0, v_1, \dots, v_k,其中 v0=sv_0 = s,vk=tv_k = t;
  • 移除路径上的所有边;换句话说,移除边 (v0,v1),(v1,v2),…,(vk−1,vk)(v_0, v_1), (v_1, v_2), \dots, (v_{k-1}, v_k);
  • 将顶点 v1,v2,…,vkv_1, v_2, \dots, v_k 直接连接到 v0v_0,换句话说,添加边 (v0,v1),(v0,v2),…,(v0,vk)(v_0, v_1), (v_0, v_2), \dots, (v_0, v_k)。

可以证明,经过上述操作后,该图仍然是一棵树,请帮助她确定实现最小直径所需的最少操作次数。

输入描述

每个测试包含多个测试用例,第一行包含测试用例的数量 tt(1⩽t⩽1041 \leqslant t \leqslant 10^4);测试用例的描述如下:

每个测试用例的第一行包含一个整数 nn(2⩽n⩽2×1052 \leqslant n \leqslant 2 \times 10^5)表示树中结点的数量。

每个测试用例接下来的 n−1n-1 行描述了一棵树:每行包含两个整数 uu 和 vv(1⩽u,v⩽n1 \leqslant u, v \leqslant n,u≠vu \neq v),表示顶点 uu 和 vv 之间的边并保证这些边构成一棵树。

保证所有测试用例的 nn 之和不超过 2×1052 \times 10^5。

输出描述

对于每个测试用例,输出一个整数表示最小化直径的最少操作次数。

样例

4
4
1 2
1 3
2 4
2
2 1
4
1 2
2 3
2 4
11
1 2
1 3
2 4
3 5
3 8
5 6
5 7
7 9
7 10
5 11
1
0
0
4

注释

样例 1 的树

选择从 1 ~ 4 切断所有树枝

将所有结点连接至 1

在第一个测试用例中,原始树的直径为 3。Paper 可以对 s=1s = 1 和 t=4t = 4 执行操作。如图所示,该运算包含以下步骤:

  1. 移除树径 (1,2)(1, 2),(2,3)(2, 3) 和 (3,4)(3, 4)。
  2. 添加树径 (1,2)(1, 2),(1,3)(1, 3) 和 (1,4)(1, 4)。

经过上述操作,直径减小为 33。可以证明 33 是最小直径。

在第二个样例中,树的直径为 1。可以证明 1 已经是最小值,因此 Paper 无需执行任何操作。


  1. 树的直径是任意一对顶点之间可能的最长距离,该距离本身由连接它们的唯一简单路径上的边数来衡量。 ↩︎

  2. 简单路径是树中两个顶点之间的路径,且该路径不会重复访问任何顶点,可以证明,任意两个顶点之间的简单路径始终是唯一的。 ↩︎