atcoder#ARC156C. [ARC156C] Tree and LCS

[ARC156C] Tree and LCS

题目描述

頂点に 1 1 から N N の番号がついた木 T T があります。 T T i (1 i  N1) i\ (1\leq\ i\ \leq\ N-1) 番目の辺は頂点 ui u_i と頂点 vi v_i を結んでいます。

T T を用いて、(1,2,,N) (1,2,\ldots,N) の順列 P = (P1,P2,,PN) P\ =\ (P_1,P_2,\ldots,P_N) 類似度を以下で定めます。

  • T T 上の任意の単純パス x=(x1,x2,,xk) x=(x_1,x_2,\ldots,x_k) に対して、y=(Px1, Px2,,Pxk) y=(P_{x_1},\ P_{x_2},\ldots,P_{x_k}) とする。このとき、x x y y の最長共通部分列の長さとして考えられる最大値を類似度とする。

類似度が最小となるような順列 P P を一つ構築してください。

部分列とは 数列の部分列とは、数列から 0 0 個以上の要素を取り除いた後、残りの要素を元の順序で連結して得られる数列のことをいいます。 例えば、(10,30) (10,30) (10,20,30) (10,20,30) の部分列ですが、(20,10) (20,10) (10,20,30) (10,20,30) の部分列ではありません。 単純パスとは グラフ G G 上の頂点 X,Y X,Y に対して、頂点列 v1,v2, , vk v_1,v_2,\ \ldots,\ v_k であって、 v1=X v_1=X , vk=Y v_k=Y かつ、1 i k1 1\leq\ i\leq\ k-1 に対して vi v_i vi+1 v_{i+1} が辺で結ばれているようなものを頂点 X X から頂点 Y Y への ウォーク と呼びます。 さらに、v1,v2, , vk v_1,v_2,\ \ldots,\ v_k がすべて異なるようなものを頂点 X X から頂点 Y Y への 単純パス (あるいは単に パス) と呼びます。

输入格式

入力は以下の形式で標準入力から与えられる。

N N u1 u_1 v1 v_1 u2 u_2 v2 v_2 \vdots uN1 u_{N-1} vN1 v_{N-1}

输出格式

類似度が最小となるような順列 P P を空白区切りで出力せよ。解が複数存在する場合、どれを出力しても正解とみなされる。

题目大意

给定一棵 nn 个节点的树 TT

我们以下面的方式定义一个长度为 nn 的排列 PP 的价值:

考虑一条树 TT 上的简单路径 x=(x1,x2,,xk)x=(x_1,x_2,\dots ,x_k),我们令 y=(px1,px2,,pxk)y=(p_{x_1},p_{x_2},\dots,p_{x_k}),这条路径的价值就是序列 xx 和序列 yy 的最长公共子序列的长度。排列 PP 的价值树上所有的简单路径的权值的最大值。

你需要构造一个排列 PP,使得 PP 与树 TT 的相似度最小。

3
1 2
2 3
3 2 1
4
2 1
2 3
2 4
3 4 1 2

提示

制約

  • 2  N  5000 2\ \leq\ N\ \leq\ 5000
  • 1 ui,vi N 1\leq\ u_i,v_i\leq\ N
  • 与えられるグラフは木
  • 入力される数値は全て整数

Sample Explanation 1

出力例の順列の類似度は 1 1 となっています。これは、以下のように計算できます。 - x=(1) x=(1) のとき y=(P1)=(3) y=(P_1)=(3) です。x,y x,y の最長共通部分列の長さは 0 0 です。 - x=(2) x=(2) のとき y=(P2)=(2) y=(P_2)=(2) です。x,y x,y の最長共通部分列の長さは 1 1 です。 - x=(3) x=(3) のとき y=(P3)=(1) y=(P_3)=(1) です。x,y x,y の最長共通部分列の長さは 0 0 です。 - x=(1,2) x=(1,2) のとき y=(P1,P2)=(3,2) y=(P_1,P_2)=(3,2) です。x,y x,y の最長共通部分列の長さは 1 1 です。 これを反転した x=(2,1) x=(2,1) についても同様です。 - x=(2,3) x=(2,3) のとき y=(P2,P3)=(2,1) y=(P_2,P_3)=(2,1) です。x,y x,y の最長共通部分列の長さは 1 1 です。 これを反転した x=(3,2) x=(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) です。x,y x,y の最長共通部分列の長さは 1 1 です。これを反転した x=(3,2,1) x=(3,2,1) についても同様です。 類似度が 0 0 以下の順列は存在しないことが証明できるので、これが答えとなります。

Sample Explanation 2

類似度が最小の順列が複数存在する場合、どれを出力してもよいです。例えば、4 3 2 1 といった出力も正解になります。