氧气少年去砍树 2
题号:NC266909
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

\sf Found\ myself\ a\ new\ vocation

\sf Calibrated\ motivation

\sf No\ more\ static,\ change\ the\ station

\sf Head\ to\ somewhere

           —— \text{OneRepublic},\ Sunshine
氧气少年有一棵包含 n 个节点的树,树根为 1 号节点,氧气少年可以进行下面的操作最多一次:
  •  选择树上的任意一个节点( 1 号节点除外),将以此节点为根的子树从原位置取走,再将它挂到树上其它任意一个节点的下方。

请求出在这以后,树的可能的最小直径。

树的直径是指树中任意两个节点之间最长路径的长度。

输入描述:

第一行包含一个整数 T(1\leq T \leq 10^5),表示测试用例的组数。

对于每组测试用例:

第一行包含一个整数 n(1\leq n\leq 2\cdot 10^5),表示树的节点数量。
接下来 n-1 行,每行包含两个整数 u,v(1\leq u,v\leq n,u\neq v),表示树上存在一条从 uv 的边。保证给出的边能够形成一棵树。

保证对于所有的测试用例,n 的总和不超过 2\cdot 10^5

输出描述:

对于每组测试用例:

仅输出一行,包含一个整数,表示答案。
示例1

输入

复制
2
3
1 2
1 3
7
1 2
2 3
3 4
1 5
5 6
6 7

输出

复制
3
5

说明

对于第二组样例数据:

给出的树的形态如下图所示,树的直径为 7



选择树上的 6 号节点,将以此节点为根的子树从原位置取走,再将它挂到 2 号节点的下方,此时树的直径为 5