No.2618 除霊
タグ : / 解いたユーザー数 54
作問者 : startcpp / テスター : 👑 Kazun
問題文
すたーと市には $N$ 個の街があり、 $N - 1$ 本の道路が通っています。
道路 $i$ は街 $A_i$ と 街 $B_i$ を双方向に結び、どの $2$ つの街の間もいくつかの道路を辿ることで移動できます。
さて、すたーと市では夜になると $M$ 個の街 $V_1, \cdots, V_M$ にオバケが現れます。
それぞれのオバケは範囲魔法を放ち、
現れた街から $0$ 本または $1$ 本の道路を辿って移動することができる全ての街に対して、いたずらをします。
いたずらをされると後片付けが大変なので、除霊をおこなうことにしました。
街 $v$ ($1 \le v \le N$) で除霊をおこなうと、
街 $v$ から $0$ 本または $1$ 本の道路を辿って移動できる街に現れたオバケを消滅させる魔法を放ちます。
魔法をかけられたオバケは、どの街にもいたずらをすることができなくなります。
除霊作業は大変なので $1$ 回しかおこなうことができません。そのため、どの街で除霊をおこなうかは重要な問題です。
$v = 1, 2, \cdots, N$ それぞれについて、街 $v$ で除霊をおこなった場合にいたずらされる街の個数を求めてください。
入力
$N$ $A_1$ $B_1$ $\cdots$ $A_{N-1}$ $B_{N-1}$ $M$ $V_1 \dots V_M$
- 入力は全て整数
- どの $2$ つの街の間もいくつかの道を辿ることで到達できる
- $2 \le N \le 200000$
- $1 \le A_i \le N, 1 \le B_i \le N$
- $1 \le M \le N$
- $1 \le V_1 \lt V_2 \lt \cdots \lt V_M \le N$
出力
$i$ ($1 \le i \le N$) 行目に、街 $i$ で除霊をおこなった場合にいたずらされる街の個数を出力してください。
サンプル
サンプル1
入力
6 1 2 2 3 3 4 3 5 5 6 3 2 3 6
出力
5 2 2 5 3 5
サンプル1では街 $2, 3, 6$ にオバケが出現します。除霊をおこなわない場合、黄色で示した街(この場合は全ての街)にいたずらされてしまいます。
街 $3$ で除霊をおこなった場合、街 $2, 3$ に出現するオバケは消滅し、街 $6$ にいるオバケだけがいたずらできます。
このとき、いたずらされる街は街 $5, 6$ の $2$ 個になります。
街 $5$ は除霊範囲ですが、消滅しないオバケのいたずらは無効化できないので注意してください。
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。