Enzo
Loading...
Searching...
No Matches
UnionFind.h
1#pragma once
2#include <cstddef>
3#include <cstdint>
4#include <vector>
5
6namespace enzo::util {
7
21class UnionFind
22{
23 public:
25 explicit UnionFind(std::size_t elementCount);
26
28 std::size_t find(std::size_t x);
29
32 bool unite(std::size_t a, std::size_t b);
33
35 bool sameSet(std::size_t a, std::size_t b) { return find(a) == find(b); }
36
38 std::size_t componentCount() const { return componentCount_; }
39
41 std::size_t size() const { return parent_.size(); }
42
43 private:
44 std::vector<std::size_t> parent_;
45 std::vector<std::uint8_t> rank_;
46 std::size_t componentCount_;
47};
48
49} // namespace enzo::util
bool unite(std::size_t a, std::size_t b)
Joins the components containing a and b.
Definition UnionFind.cpp:23
UnionFind(std::size_t elementCount)
Constructs an instance with each of elementCount elements in its own component.
Definition UnionFind.cpp:6
std::size_t componentCount() const
Number of distinct components currently tracked.
Definition UnionFind.h:38
bool sameSet(std::size_t a, std::size_t b)
Reports whether a and b are in the same component.
Definition UnionFind.h:35
std::size_t size() const
Total elements managed by this instance.
Definition UnionFind.h:41
std::size_t find(std::size_t x)
Returns the root ID of the component containing x.
Definition UnionFind.cpp:13