結果
問題 |
No.1488 Max Score of the Tree
|
ユーザー |
![]() |
提出日時 | 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