結果
| 問題 |
No.977 アリス仕掛けの摩天楼
|
| ユーザー |
|
| 提出日時 | 2020-01-31 22:03:45 |
| 言語 | Ruby (3.4.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,120 bytes |
| コンパイル時間 | 63 ms |
| コンパイル使用メモリ | 7,552 KB |
| 実行使用メモリ | 20,252 KB |
| 最終ジャッジ日時 | 2024-09-17 08:18:26 |
| 合計ジャッジ時間 | 6,544 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 16 WA * 1 TLE * 1 -- * 8 |
コンパイルメッセージ
Syntax OK
ソースコード
class Node
attr_accessor :parent, :rank
def initialize(n)
@parent = n
@rank = 0
end
end
class UnionFindTree
def initialize(n)
@nodes = (0..n).to_a.map { |i| Node.new(i) }
end
def find(x)
return @nodes[x].parent == x ? x : @nodes[x].parent = find(@nodes[x].parent)
end
def unite(a, b)
a = find(a)
b = find(b)
return if a == b
if @nodes[a].rank < @nodes[b].rank
@nodes[a].parent = b
else
@nodes[b].parent = a
@nodes[a].rank += 1 if @nodes[a].rank == @nodes[b].rank
end
end
def same?(a, b)
find(a) == find(b)
end
# 確認用。アルゴリズムとは関係無い
def parents
@nodes.map(&:parent)
end
end
n = gets.to_i
# n, q = gets.split.map(&:to_i)
uft = UnionFindTree.new(n)
(n-1).times do |i|
x,y = gets.split.map(&:to_i)
# if com == 0
uft.unite(x, y)
# else
# puts uft.same?(x, y) ? 1 : 0
# end
end
n.times do |i|
(0...i).each do |j|
if not uft.same?(i,j)
puts "Alice"
exit
# flag = false
# break
end
end
end
puts "Bob"