メルカリ競プロコンテスト2024
コンテスト日時
2024/10/05 (Sa) 13:45 - 15:45

E - ハロ1

Darjeeling
5
s
1024
MB
475

問題文

ストーリー

※ この章を読み飛ばしても問題を解くことができます

メル君は、メルカリハロを用いてスキマバイトを行います。メル君が住む町は木構造で表現され、メル君は頂点 $1$ に存在します。
木の各頂点では一つのアルバイトが募集されており、バイト ID が定められています。

仕事熱心なメル君は、後戻りせずに町を移動し、アルバイトを $1$ 回ずつ合計 $K$ 件こなす予定です。
また、メル君は辞書順最小の列が好きです。行ったアルバイトのバイト ID を順につなげた列 $(A_1, A_2, \ldots, A_K)$ を辞書順最小にしたいです。

あり得るバイト ID の列のうち、辞書順最小のものを求めてください。

問題

頂点に $1$ から $N$ の番号がついた $N$ 頂点の木が与えられます。木の $i$ $(1 \leq i \leq N - 1)$ 番目の辺は、頂点 $u_i$ と頂点 $v_i$ を双方向に連結します。
また、各頂点 $j$ $(1 \leq j \leq N)$ には、整数 $X_j$ が割り当てられています。

メル君は、頂点 $1$ 上に存在し、空の数列 $A$ を持っています。
移動できる頂点がなくなるまで以下の操作を順に行います。

  1. メル君が現在いる頂点番号を $c$ としたとき、数列 $A$ の末尾に $X_{c}$ 追加するかを選択する (追加しないとき、数列 $A$ は変化しない)
  2. $c$ に隣接する頂点のうち、メル君がまだ訪れたことのない頂点を選び移動する。

操作後に得られる長さ $K$ の数列 $A$ の中で、辞書順最小のものを出力してください。
長さが $K$ となる数列 $A$ が存在しない場合、$-1$ を出力してください。

制約

  • $1 \leq N \leq 200{,}000$
  • $1 \leq K \leq N$
  • $1 \leq u_i \lt v_i \leq N$
  • 与えられるグラフは木
  • $1 \leq X_j \leq N$
  • $X_1, X_2, \ldots, X_N$ はすべて異なる
  • 入力はすべて整数

入力

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

$N$ $K$
$u_1$ $v_1$
$u_2$ $v_2$
$\vdots$
$u_{N - 1}$ $v_{N - 1}$
$X_1$ $X_2$ $\ldots$ $X_N$

出力

操作を繰り返し行い得られる長さ $K$ の数列のなかで、辞書順最小のものを一行に出力せよ。ただし、長さが $K$ となる数列 $A$ が存在しない場合、$-1$ を出力せよ。最後に改行すること。

入力例 1
7 2 1 2 1 3 2 4 2 5 4 6 3 7 1 5 4 3 2 6 7
出力例 1
1 2
入力例 2
7 3 1 2 1 3 2 4 2 5 4 6 3 7 1 5 4 3 2 6 7
出力例 2
1 3 6
入力例 3
7 4 1 2 1 3 2 4 2 5 4 6 3 7 1 5 4 3 2 6 7
出力例 3
1 5 3 6
入力例 4
7 5 1 2 1 3 2 4 2 5 4 6 3 7 1 5 4 3 2 6 7
出力例 4
-1
提出
C++23 (g++ 12.2.0)