結果
問題 |
No.417 チューリップバブル
|
ユーザー |
![]() |
提出日時 | 2025-06-30 11:53:24 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 123 ms / 2,000 ms |
コード長 | 1,124 bytes |
コンパイル時間 | 525 ms |
コンパイル使用メモリ | 82,096 KB |
実行使用メモリ | 76,704 KB |
最終ジャッジ日時 | 2025-06-30 11:53:29 |
合計ジャッジ時間 | 4,970 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 40 |
ソースコード
N,M = map(int,input().split()) U = [int(input()) for _ in range(N)] AB = [list(map(int,input().split())) for _ in range(N-1)] E = [[] for _ in range(N)] for a, b, c in AB: E[a].append((b,c)) E[b].append((a,c)) dp = [[] for _ in range(N)] def dfs(x,p = -1): t1 = [] for y,c in E[x]: t2 = {0:0} if y != p: a = 2 * c b = U[y] dfs(y,x) for c,d in dp[y].items(): ac = a + c bd = b + d if ac <= M: if ac in t2: t2[ac] = max(t2[ac],bd) else: t2[ac] = bd t1.append(t2) tq1 = {0:0} for i in range(len(t1)): tq2 = {} for a,b in t1[i].items(): for c,d in tq1.items(): ac = a+c bd = b+d if ac <= M: if ac in tq2: tq2[ac] = max(tq2[ac],bd) else: tq2[ac] = bd tq1 = tq2 dp[x] = tq1 dfs(0) print(max(dp[0].values()) + U[0])