atcoder#TOKIOMARINE2020D. Knapsack Queries on a tree

Knapsack Queries on a tree

配点 : 700700

問題文

NN 頂点からなる根付き二分木があり、各頂点には 11 から NN までの番号がついています。 頂点 11 が根であり、頂点 ii (i2i \geqq 2) の親は頂点 [i2]\left[ \frac{i}{2} \right] です。

各頂点には 11 つのアイテムがあります。頂点 ii にあるアイテムの価値は ViV_i であり、重さは WiW_i です。 そこで、次のクエリに QQ 回答えてください。

  • 二分木の頂点 vv 及び正の整数 LL が与えられる。 vv 及び vv の先祖にあるアイテムを、重さの合計が LL 以下となるようにいくつか(00 個でもよい)選ぶ。 このとき、選んだアイテムの価値の総和の最大値を求めよ。

ただし、頂点 uu が頂点 vv の先祖であるとは、頂点 uu が頂点 vv の間接的な親である、つまり、 w1=vw_1=vwk=uw_k=u、さらに各 ii について wi+1w_{i+1}wiw_i の親となるような頂点の列 w1,w2,,wkw_1,w_2,\ldots,w_k (k2k\geqq 2) が存在することを指します。

制約

  • 1N<2181 \leqq N < 2^{18}
  • 1Q1051 \leqq Q \leqq 10^5
  • 1Vi1051 \leqq V_i \leqq 10^5
  • 1Wi1051 \leqq W_i \leqq 10^5
  • 各クエリで指定される vv, LL1vN1 \leqq v \leqq N, 1L1051 \leqq L \leqq 10^5 を満たす。
  • 入力で与えられる値はすべて整数である。

入力

ii 回目のクエリで指定される vv, LL をそれぞれ viv_i, LiL_i とする。 このとき、入力は以下の形式で標準入力から与えられる。

NN

V1V_1 W1W_1

::

VNV_N WNW_N

QQ

v1v_1 L1L_1

::

vQv_Q LQL_Q

出力

11 から QQ までの各整数 ii について、 ii 回目のクエリに対する答えを ii 行目に出力せよ。

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

最初のクエリでは、選ぶことのできるアイテムは (V,W)=(1,2)(V,W)=(1,2) なるアイテムのみであるので、 L=1L=1 より 11 つもアイテムを選ぶことができません。 したがって、答えは 00 になります。

一方で 22 番目のクエリでは、選ぶことのできるアイテムは (V,W)=(1,2)(V,W)=(1,2) なるアイテムと (V,W)=(2,3)(V,W)=(2,3) なるアイテムの 22 つであり、 L=5L=5 より両方を選ぶことができます。 したがって、答えは 33 になります。

15
123 119
129 120
132 112
126 109
118 103
115 109
102 100
130 120
105 105
132 115
104 102
107 107
127 116
121 104
121 115
8
8 234
9 244
10 226
11 227
12 240
13 237
14 206
15 227
256
255
250
247
255
259
223
253