#arc156c. [arc156_c]Tree and LCS

[arc156_c]Tree and LCS

问题陈述

我们有一个编号为11NN的树TTTT的第ii条边连接顶点uiu_i和顶点viv_i

让我们使用TT来定义排列P=(P1,P2,ldots,PN)P = (P_1,P_2,\\ldots,P_N)(1,2,ldots,N)(1,2,\\ldots,N)的一种排列)的相似性,具体如下。

  • 对于树TT中的一条简单路径x=(x1,x2,ldots,xk)x=(x_1,x_2,\\ldots,x_k),设y=(Px1,Px2,ldots,Pxk)y=(P_{x_1}, P_{x_2},\\ldots,P_{x_k})。相似性是xxyy的最长公共子序列的最大可能长度。

构造一个相似性最小的排列PP

什么是子序列?序列的子序列是从该序列中删除零个或多个元素并连接剩余元素而不改变相对顺序得到的序列。例如,(10,30)(10,30)(10,20,30)(10,20,30)的一个子序列,但(20,10)(20,10)不是。什么是简单路径?对于图GG中的顶点XXYY,从XXYY的一条路径是一个顶点序列v1,v2,ldots,vkv_1,v_2, \\ldots, v_k,满足v1=Xv_1=Xvk=Yv_k=Y,且viv_ivi+1v_{i+1}之间有一条边相连。一个简单路径(或者说是路径)是这样一条路径,其中v1,v2,ldots,vkv_1,v_2, \\ldots, v_k各不相同。

约束条件

  • 2leqNleq50002 \\leq N \\leq 5000
  • 1lequi,vileqN1\\leq u_i,v_i\\leq N
  • 给定的图是一棵树。
  • 输入中的所有数都是整数。

输入

输入以以下格式从标准输入给出:

NN u1u_1 v1v_1 u2u_2 v2v_2 vdots\\vdots uN1u_{N-1} vN1v_{N-1}

输出

按照空格分隔打印一个相似性最小的排列PP。如果存在多个解,则可以打印任意一个。


示例输入1

3
1 2
2 3

示例输出1

3 2 1

该排列的相似性为11,可以按照以下方式计算:

  • 对于x=(1)x=(1),我们有y=(P1)=(3)y=(P_1)=(3)xxyy的最长公共子序列的长度为00

  • 对于x=(2)x=(2),我们有y=(P2)=(2)y=(P_2)=(2)xxyy的最长公共子序列的长度为11

  • 对于x=(3)x=(3),我们有y=(P2)=(1)y=(P_2)=(1)xxyy的最长公共子序列的长度为00

  • 对于x=(1,2)x=(1,2),我们有y=(P1,P2)=(3,2)y=(P_1,P_2)=(3,2)xxyy的最长公共子序列的长度为11。 对于(1,2)(1,2)的逆序(2,1)(2,1)同样如此。

  • 对于x=(2,3)x=(2,3),我们有y=(P2,P3)=(2,1)y=(P_2,P_3)=(2,1)xxyy的最长公共子序列的长度为11。 对于(2,3)(2,3)的逆序(3,2)(3,2)同样如此。

  • 对于x=(1,2,3)x=(1,2,3),我们有y=(P1,P2,P3)=(3,2,1)y=(P_1,P_2,P_3)=(3,2,1)xxyy的最长公共子序列的长度为11。 对于(1,2,3)(1,2,3)的逆序(3,2,1)(3,2,1)同样如此。

我们可以证明没有排列具有相似性为00或更小的,因此这个排列是一个有效的答案。


示例输入2

4
2 1
2 3
2 4

示例输出2

3 4 1 2

如果有多个排列具有最小的相似性,您可以打印其中任何一个。例如,也可以打印4 3 2 1