結果
問題 | No.1488 Max Score of the Tree |
ユーザー |
![]() |
提出日時 | 2023-02-21 01:04:27 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 241 ms / 2,000 ms |
コード長 | 1,303 bytes |
コンパイル時間 | 416 ms |
コンパイル使用メモリ | 82,048 KB |
実行使用メモリ | 142,848 KB |
最終ジャッジ日時 | 2024-07-21 14:21:00 |
合計ジャッジ時間 | 5,599 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 29 |
ソースコード
from collections import deque def non_rec_dfs(s): stack = [] stack.append(~s) stack.append(s) par = [-1] * N dist = [0] * N inf = 10 ** 18 pre = [-inf] * (K + 1) pre[0] = 0 leaf = [0] * N while stack: u = stack.pop() if u >= 0: stack.append(~u) flag = 0 for v, c in G[u]: if v == par[u]: continue par[v] = u dist[v] = dist[u] + c flag = 1 stack.append(v) if not flag: leaf[u] = 1 else: u = ~u if par[u] == -1: continue leaf[par[u]] += leaf[u] dp = [-inf] * (K + 1) cost = D[(par[u], u)] for i in range(K + 1): dp[i] = pre[i] + cost * leaf[u] if i - cost >= 0: dp[i] = max(dp[i], pre[i - cost] + 2 * cost * leaf[u]) dp, pre = pre, dp return max(pre) N, K = map(int, input().split()) G = [[] for i in range(N)] D = dict() for i in range(N - 1): a, b, c = map(int, input().split()) a, b = a - 1, b - 1 G[a].append((b, c)) G[b].append((a, c)) D[(a, b)] = c D[(b, a)] = c print(non_rec_dfs(0))