結果
| 問題 |
No.1488 Max Score of the Tree
|
| コンテスト | |
| ユーザー |
siman
|
| 提出日時 | 2021-04-27 14:18:56 |
| 言語 | Ruby (3.4.1) |
| 結果 |
AC
|
| 実行時間 | 912 ms / 2,000 ms |
| コード長 | 756 bytes |
| コンパイル時間 | 159 ms |
| コンパイル使用メモリ | 7,552 KB |
| 実行使用メモリ | 95,180 KB |
| 最終ジャッジ日時 | 2024-07-06 08:34:52 |
| 合計ジャッジ時間 | 10,407 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 29 |
コンパイルメッセージ
Syntax OK
ソースコード
N, K = gets.split.map(&:to_i)
E = Hash.new { |h, k| h[k] = [] }
C = Array.new(N + 1) { Array.new(N + 1, 0) }
L = []
(N - 1).times do
a, b, c = gets.split.map(&:to_i)
if a < b
L << [a, b, c]
E[a] << [b, c]
E[b] << [a, c]
else
L << [b, a, c]
E[a] << [b, c]
E[b] << [a, c]
end
end
def dfs(v, parent = -1)
val = 0
E[v].each do |u, c|
next if u == parent
a = dfs(u, v)
C[v][u] = C[u][v] = a
val += a
end
[1, val].max
end
dfs(1)
dp = Hash.new(0)
dp[0] = L.map { |u, v, c| C[u][v] * c }.sum
L.each do |u, v, c|
temp = dp.dup
dp.each do |k, val|
nk = k + c
nc = val + C[u][v] * c
next if nk > K
next if temp[nk] >= nc
temp[nk] = nc
end
dp = temp
end
pp dp.values.max
siman