#P16053. [Oni2022国家队选拔赛]Arborigami折叠

[Oni2022国家队选拔赛]Arborigami折叠

题目描述

Miyuki 有一棵由 NN 个节点组成的树,节点编号为 11NN。他希望通过若干次“折叠”操作,把这棵树变成一个星形树。

这里,经过 KK 次操作后,树的大小会变成 NKN-K。一个大小为 NKN-K 的树若至少有 NK1N-K-1 个叶子节点,就称为星形树。叶子节点指恰好有一个邻居的节点。

ii 次折叠操作如下:

  1. 在当前树中选择两个不同节点 ai,bia_i,b_i
  2. VVaia_ibib_i 的所有邻居组成的集合;
  3. ai,bia_i,b_i 本身出现在 VV 中,则从 VV 中删除它们;
  4. 从树中删除节点 ai,bia_i,b_i 以及所有与它们相连的边;
  5. 加入一个新节点,编号为 N+iN+i
  6. 将新节点 N+iN+iVV 中的每个节点连边。

每次操作后,得到的图必须仍然是一棵树;也就是说,操作不能产生环。若会产生环,则该操作非法,不能执行。

Miyuki 希望使用最少次数的折叠操作,将原树变成星形树。请你输出:

  1. 最小操作次数 KK
  2. 一组可以达到该最小次数的 KK 次操作。

输入格式

第一行输入一个整数 NN,表示初始树的节点数。

接下来 N1N-1 行,每行输入两个整数 ui,viu_i,v_i,表示树上的一条边。

输出格式

第一行输出一个整数 KK,表示最少需要执行的折叠操作次数。

接下来 KK 行,每行输出两个整数 ai,bia_i,b_i,表示第 ii 次折叠操作选择的两个节点。

若有多种合法答案,输出任意一种即可。

数据范围与约束

  • 1N5000001\le N\le 500000

子任务

子任务 分值 限制
1 10 1N151\le N\le 15
2 20 1N2001\le N\le 200
3 10 对所有 1i<N1\le i<Nui=i,vi=i+1u_i=i,v_i=i+1,即树是一条链
4 60 无额外限制

样例 1

输入

5
1 2
2 3
3 4
4 5

输出

1
2 4

解释

执行一次折叠,选择节点 2244

它们的邻居集合为 V={1,3,5}V=\{1,3,5\}。删除节点 2,42,4 后,加入新节点 N+1=6N+1=6,并加入边 (1,6),(3,6),(5,6)(1,6),(3,6),(5,6)

最终树由节点 1,3,5,61,3,5,6 和上述三条边组成,是一棵星形树。

样例 2

输入

6
1 2
2 3
3 4
4 5
5 6

输出

2
2 4
5 7

解释

先折叠 (2,4)(2,4),加入节点 77;再折叠 (5,7)(5,7),加入节点 88

最终树由节点 1,3,6,81,3,6,8 组成,边为 (1,8),(3,8),(6,8)(1,8),(3,8),(6,8),是一棵星形树。