Sha256: c6a170febff69412e2522f208febc6fe0962dd3d31896ba74fd71f8f6a5cfba4
Contents?: true
Size: 861 Bytes
Versions: 4
Compression:
Stored size: 861 Bytes
Contents
# Disjoint Set Union class DSU def initialize(n = 0) # root node: -1 * component size # otherwise: parent @parent_or_size = Array.new(n, -1) end attr_accessor :parent_or_size def merge(a, b) x = leader(a) y = leader(b) return x if x == y x, y = y, x if -@parent_or_size[x] < -@parent_or_size[y] @parent_or_size[x] += @parent_or_size[y] @parent_or_size[y] = x end alias unite merge def same(a, b) leader(a) == leader(b) end alias same? same def leader(a) @parent_or_size[a] < 0 ? a : (@parent_or_size[a] = leader(@parent_or_size[a])) end alias root leader alias find leader def size(a) -@parent_or_size[leader(a)] end def groups (0 ... @parent_or_size.size).group_by{ |i| leader(i) }.values end end UnionFind = DSU UnionFindTree = DSU DisjointSetUnion = DSU
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
ac-library-rb-0.5.3 | lib/dsu.rb |
ac-library-rb-0.5.2 | lib/dsu.rb |
ac-library-rb-0.5.1 | lib/dsu.rb |
ac-library-rb-0.5.0 | lib/dsu.rb |