結果

問題 No.3283 Labyrinth and Friends
ユーザー timi
提出日時 2025-09-27 17:19:03
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 273 ms / 2,000 ms
コード長 800 bytes
コンパイル時間 615 ms
コンパイル使用メモリ 82,588 KB
実行使用メモリ 79,308 KB
最終ジャッジ日時 2025-09-27 17:19:13
合計ジャッジ時間 6,765 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 45
権限があれば一括ダウンロードができます

ソースコード

diff #

N,X=map(int, input().split())
D=[[] for i in range(N)] 

A=list(map(int, input().split()))
B=[]
for i in range(1,N):
  p=A[i-1]
  c,s=map(int, input().split())
  D[p-1].append(i)
  B.append((p-1,c,s))
  
C=[0]
from collections import deque
d=deque()
d.append(0)
while d:
  now=d.popleft()
  for nex in D[now]:
    C.append(nex)
    d.append(nex)

dp=[{} for i in range(N)]
  
for now in C[::-1]:
  E={}
  E[0]=0
  for nex in D[now]:
    EE={}
    dp[nex][0]=0
    for ee in dp[nex]:
      for e in E:
        s=e+ee 
        if s not in EE:
          EE[s]=10**15 
        EE[s]=min(EE[s],E[e]+dp[nex][ee])
    E=EE
  a,b,c=B[now-1]
  if now!=0:
    for e in E:
      dp[now][e+c]=b+E[e]
    dp[now][0]=0
  else:
    dp[0]=E
ans=10**15
for d in dp[0]:
  if d>=X:
    ans=min(ans,dp[0][d])

print(ans)
0