N = gets.to_i
edges = N.times.map{[]}
AB = (N-1).times.map{
  gets.split.map(&:to_i).map &:pred
}
AB.each{|a, b|
  edges[a] << b
  edges[b] << a
}
C = gets.split.map &:to_i
# 記入するスコアを昇順ソート
C.sort!


scores = edges.map.with_index{|e, i|
  [e, i]
}.sort_by{|e, i|
  # 隣接する点の数で昇順ソート
  e.size
}.zip(C).sort_by{|(e, i), c|
  i
}.map{|(e, i), c|
  c
}
ans = AB.map{|a, b|
  [scores[a], scores[b]].min
}.inject:+
p ans
puts scores*" "
