Submission #14248110
Source Code Expand
import sys
import numpy as np
from numba import njit
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
# ノード、重さ→価値
@njit('(i4,i4[:],i4[:])', cache=True)
def precompute(N, V, W):
U = 10**5 + 10
dp = np.zeros((1024, U), np.int32)
for v in range(1, min(1024, N + 1)):
p = v // 2
dp[v] = dp[p]
dp[v, W[v]:] = np.maximum(dp[v, W[v]:], dp[p, :-W[v]] + V[v])
for i in range(1, U):
dp[v][i] = max(dp[v][i], dp[v][i - 1])
return dp
@njit('(i4,i4[:],i4[:],i4[:],i4[:])', cache=True)
def main(N, V, W, v, L):
dp = precompute(N, V, W)
values = np.empty(1024, np.int32)
weights = np.empty(1024, np.int32)
def solve(i, lim, values, weights, dp):
if i < 1024:
return dp[i][lim]
values[0] = 0
weights[0] = 0
p = 0
while i >= 1024:
for j in range(1 << p):
values[j + (1 << p)] = values[j] + V[i]
weights[j + (1 << p)] = weights[j] + W[i]
p += 1
i >>= 1
best = 0
for n in range(1 << p):
if weights[n] > lim:
continue
x = dp[i][lim - weights[n]] + values[n]
best = max(best, x)
return best
Q = len(v)
for i in range(Q):
x = solve(v[i], L[i], values, weights, dp)
print(x)
N = int(readline())
stdin = np.array(read().split(), np.int32)
V = np.zeros(N + 1, np.int32)
W = np.zeros(N + 1, np.int32)
V[1:] = stdin[:N + N:2]
W[1:] = stdin[1:N + N:2]
query = stdin[N + N + 1:]
v, L = query[::2], query[1::2]
main(N, V, W, v, L)
Submission Info
| Submission Time |
|
| Task |
D - Knapsack Queries on a tree |
| User |
maspy |
| Language |
Python (3.8.2) |
| Score |
700 |
| Code Size |
1738 Byte |
| Status |
AC |
| Exec Time |
1856 ms |
| Memory |
517360 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
700 / 700 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
sample01.txt, sample02.txt |
| All |
sample01.txt, sample02.txt, in01.txt, in02.txt, in03.txt, in04.txt, in05.txt, in06.txt, in07.txt, in08.txt, in09.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, sample01.txt, sample02.txt |
| Case Name |
Status |
Exec Time |
Memory |
| in01.txt |
AC |
867 ms |
507188 KiB |
| in02.txt |
AC |
870 ms |
506836 KiB |
| in03.txt |
AC |
893 ms |
506924 KiB |
| in04.txt |
AC |
906 ms |
507080 KiB |
| in05.txt |
AC |
1450 ms |
517088 KiB |
| in06.txt |
AC |
1484 ms |
517360 KiB |
| in07.txt |
AC |
1439 ms |
517184 KiB |
| in08.txt |
AC |
1856 ms |
515352 KiB |
| in09.txt |
AC |
1504 ms |
515456 KiB |
| in10.txt |
AC |
1731 ms |
517268 KiB |
| in11.txt |
AC |
1613 ms |
516368 KiB |
| in12.txt |
AC |
1768 ms |
515040 KiB |
| in13.txt |
AC |
1773 ms |
515068 KiB |
| in14.txt |
AC |
1790 ms |
515412 KiB |
| in15.txt |
AC |
1708 ms |
515768 KiB |
| in16.txt |
AC |
1423 ms |
512320 KiB |
| sample01.txt |
AC |
861 ms |
507536 KiB |
| sample02.txt |
AC |
873 ms |
508120 KiB |