結果
問題 |
No.3283 Labyrinth and Friends
|
ユーザー |
![]() |
提出日時 | 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 |
ソースコード
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)