結果
| 問題 |
No.417 チューリップバブル
|
| コンテスト | |
| ユーザー |
tktk_snsn
|
| 提出日時 | 2021-01-10 18:11:20 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 970 bytes |
| コンパイル時間 | 202 ms |
| コンパイル使用メモリ | 82,376 KB |
| 実行使用メモリ | 73,772 KB |
| 最終ジャッジ日時 | 2024-11-21 07:01:58 |
| 合計ジャッジ時間 | 4,143 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 8 WA * 31 RE * 1 |
ソースコード
import sys
input = sys.stdin.buffer.readline
sys.setrecursionlimit(10 ** 7)
inf = 10**9
N, M = map(int, input().split())
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))
topo = []
par = [-1] * N
que = [0]
while que:
s = que.pop()
topo.append(s)
for t, c in g[s]:
if t == par[s]:
continue
par[t] = s
que.append(t)
dp = [[0] for _ in range(N)]
for s in topo[::-1]:
for t, c in g[s]:
if t == par[s]:
continue
c *= 2
merge = [0] * (len(dp[s]) + len(dp[t]) + c - 1)
for i, vs in enumerate(dp[s]):
for j, vt in enumerate(dp[t]):
merge[i+j+c] = max(merge[i+j+c], vs + vt)
if len(merge) > M + 1:
merge = merge[:M + 1]
dp[s] = merge
u = U[s]
dp[s] = [u + ds for ds in dp[s]]
print(dp[s][M])
tktk_snsn