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
AC × 2
AC × 20
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