結果
問題 |
No.1254 補強への架け橋
|
ユーザー |
![]() |
提出日時 | 2020-10-11 12:59:54 |
言語 | Crystal (1.14.0) |
結果 |
AC
|
実行時間 | 133 ms / 2,000 ms |
コード長 | 1,106 bytes |
コンパイル時間 | 11,754 ms |
コンパイル使用メモリ | 297,568 KB |
実行使用メモリ | 27,100 KB |
最終ジャッジ日時 | 2024-06-30 21:20:10 |
合計ジャッジ時間 | 23,087 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 123 |
ソースコード
lib C fun strtoll(s : UInt8*, p : UInt8**, b : Int32) : Int64 end class String def to_i64 C.strtoll(self, nil, 10) end end class Solve @n : Int32 @g = Array(Array(Tuple(Int32, Int32))).new @edges = [] of Tuple(Int32, Int32) @in_loop : Int32? def initialize @n = read_line.to_i @g = (1..@n).map { Array(Tuple(Int32, Int32)).new } @n.times do |i| a, b = read_line.split.map(&.to_i.pred) @g[a] << {b, i} @g[b] << {a, i} @edges << {a, b} end @flag = Array(Int32?).new(@n, nil) end def dfs(v, prev, prev_edge) if @flag[v] @in_loop = v @flag[v] = prev_edge return end @flag[v] = prev_edge @g[v].each do |(u, i)| next if u == prev || @in_loop dfs(u, v, i) end end def solve dfs(0, -1, -1) ans = [] of Int32 now = @in_loop.not_nil! while now != @in_loop || ans.empty? edge_i = @flag[now].not_nil! ans << edge_i + 1 u, v = @edges[edge_i] now = u == now ? v : u end puts ans.size, ans.sort.join(' ') end end solve = Solve.new solve.solve