点分治
题号:NC249268
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定一棵n个点的树,请找到树上k条两两不同的路径,使得它们们的交尽量长。

路径的定义是一组有序的、两两不同的点u,x_{1},x_{2} \dots x_{m},v,其中(u,x_{1}),(x_{1},x_{2}) \dots (x_{m},v)之间均有边直接相连。两条路径不同当且仅当它们包含的点集不同(即(u,v),(v,u)算同一条路径)。路径可以只包含一个点u

路径的长度被定义为路径所包含的点的个数。不难看出,任意多条树上路径的交还是一条路径。

空路径的长度定义为0

输入描述:

第一行数据组数T(1\le T\le 10^4),对于每组数据:
第一行两个正整数n,k(1\le n \le 2\cdot 10^5 , 1\le k \le \frac{n(n-1)}{2})
接下来n-1行,每行两个正整数u,v (1\le u,v\le n),代表树上的一条边。
保证所有的n之和不超过2\cdot 10^5

输出描述:

对于每组数据,一行一个整数表示答案
示例1

输入

复制
3
4 2
1 2
1 3
1 4
5 3
1 2
2 3
2 4
3 5
3 1
1 2
2 3

输出

复制
2
3
3

备注:

对于第一个样例,可以选择[1,3],[3,4]这两条路径,它们的交是[1,3],长度为2.