結果
| 問題 |
No.1488 Max Score of the Tree
|
| コンテスト | |
| ユーザー |
👑 SPD_9X2
|
| 提出日時 | 2021-04-23 21:45:38 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 91 ms / 2,000 ms |
| コード長 | 811 bytes |
| コンパイル時間 | 140 ms |
| コンパイル使用メモリ | 82,468 KB |
| 実行使用メモリ | 63,360 KB |
| 最終ジャッジ日時 | 2024-07-04 07:50:16 |
| 合計ジャッジ時間 | 3,028 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 29 |
ソースコード
"""
ナップザック問題やな
辺が99個しかない
"""
import sys
from sys import stdin
import math
ans = 0
elis = []
def dfs(v,p):
global ans
global elis
vsum = 0
if v != p and len(lis[v]) == 1:
return 1
for nex,cost in lis[v]:
if nex != p:
cat = dfs(nex,v)
elis.append( (cost,cost*cat) )
vsum += cat
ans += cost * cat
return vsum
N,K = map(int,stdin.readline().split())
lis = [ [] for i in range(N)]
for i in range(N-1):
a,b,c = map(int,stdin.readline().split())
a -= 1
b -= 1
lis[a].append( (b,c) )
lis[b].append( (a,c) )
dfs(0,0)
dp = [0] * (K+1)
for cost,r in elis:
for i in range(K-cost,-1,-1):
dp[i+cost] = max(dp[i+cost],dp[i]+r)
print (ans + max(dp))
SPD_9X2