题目描述
小 W 曾是一名科研爱好者。在 C 国工作时,他担任测试员,日复一日地测试各种新型传送门,在城市之间来回穿梭。久而久之,他厌倦了这样的生活,于是辞去工作,来到没有任何传送门的 D 国,希望在这里重新找回对研发的热爱。
在开始研发之前,小 W 需要建造研发基地。D 国共有 n 座城市,编号为 1 到 n。这 n 座城市由 n−1 条道路连接,其中第 i (1≤i≤n−1) 条道路连接第 ui 座和第 vi 座城市。若将每座城市视作一个点,将每条道路视作连接两个点的边,则这 n 座城市和 n−1 条道路构成一棵树 T。
小 W 的经费有限,他计划选择恰好 k 座城市,在每座选中的城市里各建造一个研发基地。为了便于这些基地之间的协作,小 W 希望选中的城市在 T 中对应的点形成不超过两个连通块。形式化地,定义建造方案 S⊆{1,2,…,n} 是合理的,当且仅当 ∣S∣=k,且 S 在 T 中形成的连通块数量不超过 2。
对于合理的建造方案 S,定义第 i (1≤i≤n) 座城市的通勤距离为 d(i)=minj∈Sdist(i,j),其中 dist(i,j) 表示从第 i 座城市到第 j 座城市所需经过的道路的最少条数。特别地,若 i∈S,则 d(i)=0。定义该建造方案的通勤半径为所有城市通勤距离的最大值,即 maxi=1nd(i)。
你需要帮助小 W 求出,所有合理的建造方案的通勤半径的最小值。
输入格式
从标准输入读入数据。
本题包含多组测试数据。
输入的第一行包含两个非负整数 c,t,分别表示测试点编号与测试数据组数。特别地,若 c=0,则该测试点为样例。
接下来依次输入 t 组测试数据。对于每组测试数据:
- 第一行包含两个正整数 n,k,分别表示城市数量和小 W 计划建造的研发基地数量。
- 第 i+1 (1≤i≤n−1) 行包含两个正整数 ui,vi,分别表示第 i 条道路连接的两座城市的编号。
输出格式
输出到标准输出。
对于每组测试数据,输出一行一个非负整数,表示所有合理的建造方案的通勤半径的最小值。
样例 1
0 2
5 2
1 2
2 3
3 4
4 5
10 3
1 2
1 3
2 4
2 5
3 6
3 7
3 8
7 9
9 10
1
2
样例 2(补充训练样例)
0 1
2 2
1 2
0
提示与数据范围
样例 1 解释
该样例共包含两组测试数据。
对于第一组测试数据,共有 10 种合理的建造方案。按通勤半径分类如下:
- 通勤半径为 1 的方案:S={1,4},S={2,4},S={2,5};
- 通勤半径为 2 的方案:S={1,3},S={1,5},S={2,3},S={3,4},S={3,5};
- 通勤半径为 3 的方案:S={1,2},S={4,5}。
因此,所有合理的建造方案的通勤半径的最小值为 1。
对于第二组测试数据,一种合理的建造方案为 S={2,7,9},其中第 2 座城市单独构成一个连通块,第 7 座和第 9 座城市构成一个连通块。该建造方案的通勤半径为 2。
数据范围
设 N 为单个测试点内所有测试数据的 n 的和。对于所有测试数据,均有:
- 0≤c≤20,1≤t≤5;
- 2≤n≤106,N≤2×106,2≤k≤n;
- 对于所有 i (1≤i≤n−1),均有 1≤ui,vi≤n,且所有 (ui,vi) 构成一棵树。
| 测试点编号 |
n≤ |
N≤ |
k≤ |
特殊性质 |
| 1 |
5 |
15 |
5 |
无 |
| 2,3 |
10 |
30 |
10 |
| 4∼6 |
100 |
300 |
100 |
| 7 |
1000 |
3000 |
2 |
| 8 |
1000 |
| 9,10 |
4000 |
104 |
4000 |
| 11,12 |
105 |
3×105 |
2 |
| 13,14 |
105 |
A |
| 15 |
5×105 |
106 |
10 |
无 |
| 16,17 |
5×105 |
| 18∼20 |
106 |
2×106 |
106 |
特殊性质 A:存在正整数 m 满足 n=2m+1,且对于所有 i (1≤i≤m),均有 ui=i 且 vi=i+1;对于所有 i (m+1≤i≤n−1),均有 ui=i−m 且 vi=i+1。
来源说明
CSP-S 2026 第二轮第4题。题面据洛谷 P17834 民间数据自测整理,来源:CSP-S 2026 自测。本地采用标准输入输出与256MB内存限制,每题20个自建训练测试点、每点5分。测试数据非CCF官方数据,不复现原赛测试点评分;原选手目录外部大样例未随本包提供。