結果
問題 | No.1473 おでぶなおばけさん |
ユーザー | 小野寺健 |
提出日時 | 2021-10-31 09:54:37 |
言語 | Ruby (3.3.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,201 bytes |
コンパイル時間 | 210 ms |
コンパイル使用メモリ | 7,680 KB |
実行使用メモリ | 51,488 KB |
最終ジャッジ日時 | 2024-10-08 11:17:17 |
合計ジャッジ時間 | 4,804 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 84 ms
17,408 KB |
testcase_01 | AC | 85 ms
12,160 KB |
testcase_02 | TLE | - |
testcase_03 | -- | - |
testcase_04 | -- | - |
testcase_05 | -- | - |
testcase_06 | -- | - |
testcase_07 | -- | - |
testcase_08 | -- | - |
testcase_09 | -- | - |
testcase_10 | -- | - |
testcase_11 | -- | - |
testcase_12 | -- | - |
testcase_13 | -- | - |
testcase_14 | -- | - |
testcase_15 | -- | - |
testcase_16 | -- | - |
testcase_17 | -- | - |
testcase_18 | -- | - |
testcase_19 | -- | - |
testcase_20 | -- | - |
testcase_21 | -- | - |
testcase_22 | -- | - |
testcase_23 | -- | - |
testcase_24 | -- | - |
testcase_25 | -- | - |
testcase_26 | -- | - |
testcase_27 | -- | - |
testcase_28 | -- | - |
testcase_29 | -- | - |
testcase_30 | -- | - |
testcase_31 | -- | - |
testcase_32 | -- | - |
testcase_33 | -- | - |
testcase_34 | -- | - |
testcase_35 | -- | - |
testcase_36 | -- | - |
testcase_37 | -- | - |
testcase_38 | -- | - |
testcase_39 | -- | - |
testcase_40 | -- | - |
testcase_41 | -- | - |
testcase_42 | -- | - |
testcase_43 | -- | - |
testcase_44 | -- | - |
testcase_45 | -- | - |
testcase_46 | -- | - |
testcase_47 | -- | - |
testcase_48 | -- | - |
コンパイルメッセージ
Syntax OK
ソースコード
class PriorityQueue def initialize(array = []) @data = [] array.each{|a| push(a)} end def push(element) @data.push(element) bottom_up end def pop if size == 0 return nil elsif size == 1 return @data.pop else min = @data[0] @data[0] = @data.pop top_down return min end end def size @data.size end private def swap(i, j) @data[i], @data[j] = @data[j], @data[i] end def parent_idx(target_idx) (target_idx - (target_idx.even? ? 2 : 1)) / 2 end def bottom_up target_idx = size - 1 return if target_idx == 0 parent_idx = parent_idx(target_idx) while (@data[parent_idx][1] > @data[target_idx][1]) swap(parent_idx, target_idx) target_idx = parent_idx break if target_idx == 0 parent_idx = parent_idx(target_idx) end end def top_down target_idx = 0 # child がある場合 while (has_child?(target_idx)) a = left_child_idx(target_idx) b = right_child_idx(target_idx) if @data[b].nil? c = a else c = @data[a][1] <= @data[b][1] ? a : b end if @data[target_idx][1] > @data[c][1] swap(target_idx, c) target_idx = c else return end end end # @param Integer # @return Integer def left_child_idx(idx) (idx * 2) + 1 end # @param Integer # @return Integer def right_child_idx(idx) (idx * 2) + 2 end # @param Integer # @return Boolent def has_child?(idx) ((idx * 2) + 1) < @data.size end end n, m = gets.split(" ").map{|s| s.to_i} w = Array.new(n) {Array.new(2, -Float::INFINITY)} 0.upto(n-1) {|i| w[i][1] = Float::INFINITY } w[0][0] = Float::INFINITY v = Array.new(n) {Array.new} m.times { s, t, d = gets.split(" ").map{|s| s.to_i} v[s-1] << [t-1, d] v[t-1] << [s-1, d] } que = PriorityQueue.new que.push([0, Float::INFINITY, 0]) while que.size > 0 do cv, cd, ci = que.pop v[cv].each {|nv, nd| nd = cd if cd < nd if nd > w[nv][0] or (nd == w[nv][0] and ci+1 < w[nv][1]) then w[nv] = [nd, ci+1] que.push([nv, nd, ci+1]) if nv != n-1 end } end puts "#{w[n-1][0]} #{w[n-1][1]}"