题目描述
有一棵编号为 1 到 N 的树 T。T 的第 i 条边(1≤i≤N−1)连接了顶点 ui 和顶点 vi。
利用 T,我们定义排列 P=(P1,P2,…,PN)(1 到 N 的一个排列)的相似度如下:
- 对于 T 上任意的简单路径 x=(x1,x2,…,xk),令 y=(Px1,Px2,…,Pxk)。此时,x 和 y 的最长公共子序列的最大长度即为相似度。
请构造一个使相似度最小的排列 P。
子序列的定义
数列的子序列是指从数列中删除 0 个或多个元素后,按原顺序连接剩下元素得到的数列。例如,(10,30) 是 (10,20,30) 的子序列,但 (20,10) 不是 (10,20,30) 的子序列。
简单路径的定义
在图 G 上,顶点 X,Y 间的顶点序列 v1,v2,…,vk,满足 v1=X,vk=Y,且对于 1≤i≤k−1,vi 和 vi+1 有边相连,这样的序列称为从 X 到 Y 的步行。如果 v1,v2,…,vk 均互不相同,则称为从 X 到 Y 的简单路径(或简称路径)。
输入格式
输入通过标准输入给出,格式如下:
N
u1 v1
u2 v2
⋮
uN−1 vN−1
输出格式
请输出一个使相似度最小的排列 P,用空格分隔。如果有多个解,输出任意一个均可。
样例 1
输入
3
1 2
2 3
输出
3 2 1
样例 2
输入
4
2 1
2 3
2 4
输出
3 4 1 2
说明/提示
限制条件
- 2≤N≤5000
- 1≤ui,vi≤N
- 给定的图一定是一棵树
- 输入的所有数均为整数
样例解释 1
输出样例中的排列的相似度为 1。具体计算如下:
- 当 x=(1) 时,y=(P1)=(3),x 和 y 的最长公共子序列长度为 0。
- 当 x=(2) 时,y=(P2)=(2),x 和 y 的最长公共子序列长度为 1。
- 当 x=(3) 时,y=(P3)=(1),x 和 y 的最长公共子序列长度为 0。
- 当 x=(1,2) 时,y=(P1,P2)=(3,2),x 和 y 的最长公共子序列长度为 1。对于反向的 x=(2,1) 也同理。
- 当 x=(2,3) 时,y=(P2,P3)=(2,1),x 和 y 的最长公共子序列长度为 1。对于反向的 x=(3,2) 也同理。
- 当 x=(1,2,3) 时,y=(P1,P2,P3)=(3,2,1),x 和 y 的最长公共子序列长度为 1。对于反向的 x=(3,2,1) 也同理。
可以证明不存在相似度小于等于 0 的排列,因此这就是答案。
样例解释 2
当存在多个使相似度最小的排列时,输出任意一个均可。例如,4 3 2 1 这样的输出也是正确答案。
由 ChatGPT 4.1 翻译