#P16053. [Oni2022国家队选拔赛]Arborigami折叠
[Oni2022国家队选拔赛]Arborigami折叠
题目描述
Miyuki 有一棵由 个节点组成的树,节点编号为 到 。他希望通过若干次“折叠”操作,把这棵树变成一个星形树。
这里,经过 次操作后,树的大小会变成 。一个大小为 的树若至少有 个叶子节点,就称为星形树。叶子节点指恰好有一个邻居的节点。
第 次折叠操作如下:
- 在当前树中选择两个不同节点 ;
- 令 为 或 的所有邻居组成的集合;
- 若 本身出现在 中,则从 中删除它们;
- 从树中删除节点 以及所有与它们相连的边;
- 加入一个新节点,编号为 ;
- 将新节点 与 中的每个节点连边。
每次操作后,得到的图必须仍然是一棵树;也就是说,操作不能产生环。若会产生环,则该操作非法,不能执行。
Miyuki 希望使用最少次数的折叠操作,将原树变成星形树。请你输出:
- 最小操作次数 ;
- 一组可以达到该最小次数的 次操作。
输入格式
第一行输入一个整数 ,表示初始树的节点数。
接下来 行,每行输入两个整数 ,表示树上的一条边。
输出格式
第一行输出一个整数 ,表示最少需要执行的折叠操作次数。
接下来 行,每行输出两个整数 ,表示第 次折叠操作选择的两个节点。
若有多种合法答案,输出任意一种即可。
数据范围与约束
- ;
子任务
| 子任务 | 分值 | 限制 |
|---|---|---|
| 1 | 10 | |
| 2 | 20 | |
| 3 | 10 | 对所有 ,,即树是一条链 |
| 4 | 60 | 无额外限制 |
样例 1
输入
5
1 2
2 3
3 4
4 5
输出
1
2 4
解释
执行一次折叠,选择节点 和 。
它们的邻居集合为 。删除节点 后,加入新节点 ,并加入边 。
最终树由节点 和上述三条边组成,是一棵星形树。
样例 2
输入
6
1 2
2 3
3 4
4 5
5 6
输出
2
2 4
5 7
解释
先折叠 ,加入节点 ;再折叠 ,加入节点 。
最终树由节点 组成,边为 ,是一棵星形树。