結果

問題 No.872 All Tree Path
ユーザー TANIGUCHI KousukeTANIGUCHI Kousuke
提出日時 2019-12-10 12:47:38
言語 Ruby
(3.3.0)
結果
AC  
実行時間 1,676 ms / 3,000 ms
コード長 678 bytes
コンパイル時間 185 ms
コンパイル使用メモリ 7,680 KB
実行使用メモリ 74,624 KB
最終ジャッジ日時 2024-06-24 01:17:42
合計ジャッジ時間 16,246 ms
ジャッジサーバーID
(参考情報)
judge1 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1,666 ms
73,600 KB
testcase_01 AC 1,674 ms
73,728 KB
testcase_02 AC 1,671 ms
74,624 KB
testcase_03 AC 1,167 ms
68,480 KB
testcase_04 AC 92 ms
12,160 KB
testcase_05 AC 1,655 ms
73,856 KB
testcase_06 AC 1,676 ms
73,600 KB
testcase_07 AC 1,673 ms
73,856 KB
testcase_08 AC 207 ms
18,560 KB
testcase_09 AC 207 ms
18,432 KB
testcase_10 AC 203 ms
18,560 KB
testcase_11 AC 202 ms
18,304 KB
testcase_12 AC 217 ms
18,432 KB
testcase_13 AC 90 ms
12,160 KB
testcase_14 AC 88 ms
12,288 KB
testcase_15 AC 88 ms
12,288 KB
testcase_16 AC 89 ms
12,416 KB
testcase_17 AC 90 ms
12,160 KB
testcase_18 AC 90 ms
12,160 KB
testcase_19 AC 88 ms
12,160 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
Syntax OK

ソースコード

diff #

Edge = Struct.new(:from, :to, :weight)
N = gets.to_i
G = Array.new(N + 1){ [] } 
T = Array.new(N + 1){ [] } # tree as root was 1
C = Array.new(N + 1) # node count of subtree

(1 ... N).each do 
  u,v,w = gets.split.map(&:to_i)
  G[u] << Edge.new(u, v, w)
  G[v] << Edge.new(v, u, w)
end

used = Array.new(N + 1)
stack = [1]
used[1] = true
order = []

until stack.empty?
  u = stack.pop
  order << u
  
  G[u].each do |e|
    unless used[e.to]
      used[e.to] = true
      stack << e.to 
      T[u] << e
    end
  end
end

order.reverse_each{|u| C[u] = T[u].inject(1){|c, e| c + C[e.to] } }
ans = T.flatten.inject(0){|s, e| s +  e.weight * C[e.to] * (N - C[e.to]) * 2}

puts ans
0