1. paizaラーニングトップ
  2. レベルアップ問題集
  3. Aランクレベルアップメニュー(言語選択)
  4. 問題一覧 C編
  5. りんご拾い(情報を持ちながらの移動) C編

Aランクレベルアップメニューのアイコン
りんご拾い(情報を持ちながらの移動) C編(paizaランク B 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

頂点 1 からスタートし、あなたは一直線であるグラフを後戻りせずに、各頂点に置かれたりんごを拾いながらたどります。

グラフの頂点・辺・各頂点のりんごの数についての情報が与えられるので、
あなたが頂点 1 から i 頂点分進んだ時に持っているりんごの数 S_i を求めてください。

例として、次のような入力が与えられた際の移動のイメージは次の画像の通りです。

なお、このグラフには、多重辺や自己ループはないものとします。

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






入力される値

N   
a_1 b_1
...
a_(N-1) b_(N-1)
A_1
...
A_N


・ 1 行目には、グラフの頂点の数 N が与えられます。
・ 続く N-1 行では、各辺の両端の頂点 a_i , b_i が与えられます。(1 ≦ i ≦ N-1)
・ 続く N 行では、各頂点にあるりんごの数 A_j が与えられます。 (1 ≦ j ≦ N)


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

N 行の出力

・ 頂点 1 から k 頂点分進んだ時に持っているりんごの数 S_k を出力してください。(0 ≦ k ≦ N-1)

S_0
...
S_(N-1)

条件

すべてのテストケースにおいて、以下の条件をみたします。
・ 1 ≦ N ≦ 100
・ 1 ≦ a_i , b_i ≦ N
・ 0 ≦ A_i ≦ 100

入力例1

3
1 3
2 3
5
1
7

出力例1

5
12
13

入力例2

20
19 6
18 5
16 4
14 12
13 2
17 18
5 8
4 7
2 14
15 16
1 17
11 20
8 15
6 11
12 9
7 13
9 3
20 10
3 19
99
91
86
44
85
51
51
58
82
94
77
61
68
90
41
14
97
82
65
18

出力例2

99
196
278
363
421
462
476
520
571
639
730
820
881
963
1049
1114
1165
1242
1260
1354

問題一覧へ戻る

ページの先頭へ戻る