diff --git a/trees/quick_union.cc b/trees/quick_union.cc new file mode 100644 index 0000000..32b6e32 --- /dev/null +++ b/trees/quick_union.cc @@ -0,0 +1,22 @@ +class quick_union { +private: + vector c; +public: + quick_union(size_t n) : c(n) { + iota(c.begin(), c.end(), 0); + } + + size_t query(size_t i) { + if (c[i] != i) c[i] = query(c[i]); + return c[i]; + } + + void merge(size_t i, size_t j) { + c[query(i)] = query(j); + } + + bool connected(size_t i, size_t j) { + return query(i) == query(j); + } +}; +