atcoder#MSOLUTIONS2019D. Maximum Sum of Minimum

Maximum Sum of Minimum

配点 : 500500

問題文

NN 個の頂点 1,2,,N1,2,\ldots,N からなる木 TT と正の整数 c1,c2,,cNc_1,c_2,\ldots,c_N が与えられます。 i(1iN1)i(1 \leq i \leq N-1) 番目の辺は頂点 aia_i と頂点 bib_i をつなぐ辺です。

TT の各頂点に正の整数を書き込んだとき、以下のようにしてスコアを計算します。

  • 各辺に、22 つの端点に書き込まれた整数のうち小さい方を書き込む。
  • 各辺に書き込まれた整数の総和をスコアとする。

TT の各頂点に c1,c2,,cNc_1,c_2,\ldots,c_N11 つずつ書き込んだときのスコアの最大値を求め、 それを達成する正の整数の書き込み方を 11 つ構成してください。

c1,c2,,cNc_1,c_2,\ldots,c_N に複数回現れる整数があるときは、 その整数はその回数だけ使わなければならないことに注意してください。

制約

  • 1N100001 \leq N \leq 10000
  • 1ai,biN1 \leq a_i,b_i \leq N
  • 1ci1051 \leq c_i \leq 10^5
  • 与えられるグラフは木である

入力

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

NN

a1a_1 b1b_1

::

aN1a_{N-1} bN1b_{N-1}

c1c_1 \ldots cNc_N

出力

次の形式で出力せよ。

MM

d1d_1 \ldots dNd_N

MM はスコアの最大値を表す。 did_i は頂点 ii に書き込むべき整数を表す。 d1,d2,,dNd_1,d_2,\ldots,d_Nc1,c2,,cNc_1,c_2,\ldots,c_N の並べ替えでなければならない。

最大のスコアを達成する方法が複数個あるときは、 そのうちのどれを出力してもよい。

5
1 2
2 3
3 4
4 5
1 2 3 4 5
10
1 2 3 4 5

頂点 1,2,3,4,51,2,3,4,5 にそれぞれ 1,2,3,4,51,2,3,4,5 を書き込むと、 44 つの辺にはそれぞれ 1,2,3,41,2,3,4 が書き込まれるので、スコアは 1010 になります。

これが最大のスコアです。

5
1 2
1 3
1 4
1 5
3141 59 26 53 59
197
59 26 3141 59 53

c1,c2,,cNc_1,c_2,\ldots,c_N は互いに異なるとは限りません。