結果
| 問題 |
No.977 アリス仕掛けの摩天楼
|
| ユーザー |
|
| 提出日時 | 2020-01-31 23:01:26 |
| 言語 | Ruby (3.4.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,600 bytes |
| コンパイル時間 | 77 ms |
| コンパイル使用メモリ | 7,552 KB |
| 実行使用メモリ | 29,312 KB |
| 最終ジャッジ日時 | 2024-09-17 10:05:56 |
| 合計ジャッジ時間 | 5,716 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 21 WA * 5 |
コンパイルメッセージ
Syntax OK
ソースコード
class Node
attr_accessor :parent, :rank
def initialize
@parent = -1 # Positive value means its parent,and Negative value means its size.
@rank = 0
end
end
class UnionFindTree
def initialize(n)
@nodes = (0...n).to_a.map { |i| Node.new }
end
def find(x)
return @nodes[x].parent < 0 ? 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[b].parent += @nodes[a].parent
@nodes[a].parent = b
else
@nodes[a].parent += @nodes[b].parent
@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 size(a)
-@nodes[find(a)].parent
end
# 確認用。アルゴリズムとは関係無い
def parents
@nodes.map(&:parent)
end
end
# N, M = gets.split.map(&:to_i)
class Bridge
attr_accessor :first, :second
def initialize
@first = nil
@second = nil
end
def nodes=(a)
a[0], a[1] = a[1], a[0] if a[0] > a[1]
@first = a[0]
@second = a[1]
end
end
n = gets.to_i
# n, q = gets.split.map(&:to_i)
g = Array.new(n){[]}
uft = UnionFindTree.new(n)
(n-1).times do |i|
x,y = gets.split.map(&:to_i)
# if com == 0
uft.unite(x, y)
g[x] << y
g[y] << x
# else
# puts uft.same?(x, y) ? 1 : 0
# end
end
z = g.map{|k| k.size}
if uft.size(0) == n or uft.size(1) == n
puts "Bob"
elsif z.count(0) == 1 and z.count(2) == n-1
puts "Bob"
else
puts "Alice"
end