結果
| 問題 |
No.417 チューリップバブル
|
| ユーザー |
ntuda
|
| 提出日時 | 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])
ntuda