AtCoder Beginner Contest C - Connect Cities Difficulty: 363
Dieses Thema, Union Find
Vor kurzem gab es Ähnliches Problem und AtCoder Library Practice Contest. Die Ascherate ist jedoch erstaunlich. Das letzte Mal war es übrigens Schwierigkeitsgrad: 676 </ font>. Ruby
ruby.rb
class UnionFind
def initialize(n)
@parents = Array.new(n, -1)
end
def find(x)
@parents[x] < 0 ? x : @parents[x] = find(@parents[x])
end
def parents
@parents
end
def union(x, y)
x = find(x)
y = find(y)
return if x == y
if @parents[x] > @parents[y]
x, y = y, x
end
@parents[x] += @parents[y]
@parents[y] = x
end
end
n, m = gets.split.map(&:to_i)
u = UnionFind.new(n)
m.times do
a, b = gets.split.map(&:to_i)
u.union(a - 1, b - 1)
end
puts u.parents.select{ _1 < 0 }.size - 1
sub.rb
puts u.parents.select{ _1 < 0 }.size - 1 #diesmal
puts -u.parents.min #Letztes Mal
Ändern Sie einfach die letzte Zeile von Last time --Qiita in "AC".
sub.rb
@parents = [-3, 0, -2, 2, 0]
Wie im vorherigen "Eingabebeispiel 1" erläutert, können "u.parents [0]" und "u.parents [2]" in "u.parents" in zwei repräsentative Gruppen unterteilt werden. Es ist in Ordnung, wenn Sie es mit einer Straße verbinden.
Es gibt auch eine Möglichkeit, eine Ruby-Version von ACL unter here --github zu erstellen. Es ist "Aufmerksamkeit erforderlich".
Ruby | |
---|---|
Codelänge(Byte) | 567 |
Ausführungszeit(ms) | 170 |
Erinnerung(KB) | 15612 |
Referenzierte Site
Recommended Posts