CF2131D.Arboris Contractio
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
Kagari 正准备对一棵树进行归档,她知道归档的成本取决于树的直径 ¹。为了降低成本,她的目标是首先尽可能缩小直径。她可以对树执行以下操作:
- 选择两个顶点 s 和 t。设从 s 到 t 的简单路径 ² 上的顶点序列为 v0,v1,…,vk,其中 v0=s,vk=t。
移除路径上的所有边。即移除边 (v0,v1),(v1,v2),…,(vk−1,vk)。 - 将顶点 v1,v2,…,vk 直接连接到 v0。即添加边 (v0,v1),(v0,v2),…,(v0,vk)。
可以证明,操作后图仍然是一棵树。
请帮助她确定实现最小直径所需的最少操作次数。
注释:
¹ 树的直径是任意两个顶点之间可能的最长距离。距离本身通过连接它们的唯一简单路径上的边数来衡量。
² 简单路径是树中两个顶点之间的路径,且不会重复访问任何顶点。可以证明,任意两个顶点之间的简单路径总是唯一的。
输入格式
每个测试包含多个测试用例。
第一行包含测试用例的数量 t(1≤t≤104)。
每个测试用例的第一行包含一个整数 n(2≤n≤2⋅105),表示树中顶点的数量。
每个测试用例的接下来 n−1 行描述树。每行包含两个整数 u 和 v(1≤u,v≤n,u=v),表示顶点 u 和 v 之间有一条边。保证这些边构成一棵树。
保证所有测试用例的 n 之和不超过 2⋅105。
输出格式
对于每个测试用例,输出一个整数表示实现最小直径所需的最少操作次数。
输入输出样例
输入#1
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
1 0 0 4
说明/提示
在第一个测试用例中,原始树的直径为 3。Kagari 可以对 s=3 和 t=4 执行操作。操作包括以下步骤:
- 移除边 (3,1), (1,2) 和 (2,4)。
- 添加边 (3,1), (3,2) 和 (3,4)。
操作后,直径减小到 2。可以证明 2 是最小直径。
在第二个测试用例中,树的直径为 1。 可以证明 1 已经是最小值,因此 Kagari 无需执行操作。
输入解题思路,AI测评打分。不知道怎么写?