atcoder#ARC156C. [ARC156C] Tree and LCS
[ARC156C] Tree and LCS
配点 : 点
問題文
頂点に から の番号がついた木 があります。 の 番目の辺は頂点 と頂点 を結んでいます。
を用いて、 の順列 の類似度を以下で定めます。
- 上の任意の単純パス に対して、 とする。このとき、 と の最長共通部分列の長さとして考えられる最大値を類似度とする。
類似度が最小となるような順列 を一つ構築してください。
部分列とは
数列の部分列とは、数列から 0 個以上の要素を取り除いた後、残りの要素を元の順序で連結して得られる数列のことをいいます。 例えば、(10,30) は (10,20,30) の部分列ですが、(20,10) は (10,20,30) の部分列ではありません。
単純パスとは
グラフ G 上の頂点 X,Y に対して、頂点列 v_1,v_2, \ldots, v_k であって、 v_1=X, v_k=Y かつ、1\leq i\leq k-1 に対して v_i と v_{i+1} が辺で結ばれているようなものを頂点 X から頂点 Y への ウォーク と呼びます。 さらに、v_1,v_2, \ldots, v_k がすべて異なるようなものを頂点 X から頂点 Y への 単純パス (あるいは単に パス) と呼びます。制約
- 与えられるグラフは木
- 入力される数値は全て整数
入力
入力は以下の形式で標準入力から与えられる。
出力
類似度が最小となるような順列 を空白区切りで出力せよ。解が複数存在する場合、どれを出力しても正解とみなされる。
3
1 2
2 3
3 2 1
出力例の順列の類似度は となっています。これは、以下のように計算できます。
- のとき です。 の最長共通部分列の長さは です。
- のとき です。 の最長共通部分列の長さは です。
- のとき です。 の最長共通部分列の長さは です。
- のとき です。 の最長共通部分列の長さは です。 これを反転した についても同様です。
- のとき です。 の最長共通部分列の長さは です。 これを反転した についても同様です。
- のとき です。 の最長共通部分列の長さは です。これを反転した についても同様です。
類似度が 以下の順列は存在しないことが証明できるので、これが答えとなります。
4
2 1
2 3
2 4
3 4 1 2
類似度が最小の順列が複数存在する場合、どれを出力してもよいです。例えば、4 3 2 1
といった出力も正解になります。