11 template<
typename elt_type>
15 std::vector<int> parent;
18 std::map<elt_type, int> eltid;
25 void union_set(
const elt_type& e1,
const elt_type& e2);
29 bool same_set(
const elt_type& e1,
const elt_type& e2);
34 tempate <typename elt_type>
35 int disjoint_set<elt_type>::find_set_by_id(
int id) {
40 return parent[id] = find_set_by_id(parent[
id]);
43 template <
typename elt_type>
51 template <
typename elt_type>
54 return find_set_by_id(eltid[e]);
57 template <
typename elt_type>
60 int repr_id1 = find_set(e1);
61 int repr_id2 = find_set(e2);
62 parent[repr_id1] = repr_id2;
65 template <
typename elt_type>
66 bool disjoint_set<elt_type>::same_set(
const elt_type& e1,
const elt_type& e2) {
68 return find_set(eltid[e1]) == find_set(eltid[e2]);
71 template <
typename elt_type>
72 int disjoint_set<elt_type>::set_count() {
76 template <
typename elt_type>
77 int disjoint_set<elt_type>::set_count() {
void make_set(const elt_type &e)
Definition: disjoint_sets.h:44
bool same_set(const elt_type &e1, const elt_type &e2)
void union_set(const elt_type &e1, const elt_type &e2)
Definition: disjoint_sets.h:58
Definition: disjoint_sets.h:12
int find_set(const elt_type &e)
Definition: disjoint_sets.h:52
int set_size(const elt_type &e)
disjoint_sets()
Definition: disjoint_sets.h:24
int find_set_by_id(int id)