#CF1935F. Andrey 的树
Andrey 的树
安德烈大师非常喜欢树†,因此他有一棵由 个顶点组成的树。
但事情并没有那么简单。季莫费大师决定从树中偷走一个顶点。如果季莫费从树中偷走了顶点 ,那么顶点 以及所有以 为端点的边都会从树中删除,而其他顶点的编号保持不变。为了防止安德烈感到难过,季莫费决定让得到的图再次成为一棵树。为此,他可以在任意顶点 和 之间添加边,但在添加这样的边时,他必须向硕士协助中心支付 个硬币。
请注意,得到的树不包含顶点 。
季莫费还没有决定要从树中移除哪个顶点 ,因此他想知道对于每个顶点 ,在移除顶点 之后,为了让图再次成为一棵树所需花费的最少硬币数量,以及需要添加哪些边。
†
树是一个无向连通且不含环的图。
输入
每个测试包含多个测试用例。第一行包含一个整数 ()—— 测试用例的数量。接下来是每个测试用例的描述。
每个测试用例的第一行包含一个整数 ()—— 安德烈树中的顶点数量。
接下来的 行包含树的边的描述。其中第 行包含两个整数 和 ()—— 第 条边所连接的两个顶点的编号。
保证给定的边构成一棵树。
保证所有测试用例的 之和不超过 。
输出
对于每个测试用例,按照以下格式输出答案:
对于每个顶点 (按从 到 的顺序),在第一行输出两个整数 和 —— 在移除顶点 后,为了让图重新成为一棵树所需花费的最少硬币数量,以及添加的边的数量。
然后输出 行,每行包含两个整数 和 (,,,)—— 添加的边的端点。
如果存在多种添加边的方式,你可以输出任意一种使得总代价最小的方案。
示例
输入
3
5
1 3
1 4
4 5
3 2
5
4 2
4 3
3 5
5 1
5
2 1
1 5
1 4
1 3
输出
1 1
3 4
0 0
1 1
1 2
2 1
3 5
0 0
0 0
0 0
1 1
1 2
1 1
1 2
1 1
1 2
3 3
2 3
4 5
3 4
0 0
0 0
0 0
0 0
注意
在第一个测试用例中:
考虑移除顶点 的情况:

最优解是添加一条从顶点 到顶点 的边。这样花费为 个硬币。
在第三个测试用例中:
考虑移除顶点 的情况:

最优解是:
- 添加一条从顶点 到顶点 的边,花费 个硬币。
- 添加一条从顶点 到顶点 的边,花费 个硬币。
- 添加一条从顶点 到顶点 的边,花费 个硬币。
那么总共花费 个硬币。
考虑移除顶点 的情况:

这句话的翻译是:
不需要添加任何边,因为移除该顶点后图仍然是一棵树。