結果
問題 |
No.417 チューリップバブル
|
ユーザー |
![]() |
提出日時 | 2021-02-03 02:40:15 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 851 ms / 2,000 ms |
コード長 | 642 bytes |
コンパイル時間 | 158 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 77,440 KB |
最終ジャッジ日時 | 2024-06-30 00:10:49 |
合計ジャッジ時間 | 11,493 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 40 |
ソースコード
n,m = map(int,input().split()) m //= 2 U = [int(input()) for _ in range(n)] g = [[] for _ in range(n)] for _ in range(n-1): a,b,c = map(int,input().split()) g[a].append((b,c)) g[b].append((a,c)) dist = [0]*n parent = [-1]*n order = [0] for v in order: for u,c in g[v]: if parent[v] == u: continue dist[u] = c parent[u] = v order.append(u) def merge(v,p,d): for i in range(m,d-1,-1): for k in range(i-d+1): dp[p][i] = max(dp[p][i],dp[p][i-k-d] + dp[v][k]) dp = [[U[i]]*(m+1) for i in range(n)] for i in order[n-1:0:-1]: merge(i,parent[i],dist[i]) print(max(dp[0]))