nekolib/traits/
disjoint_set.rs1pub trait DisjointSet {
5 fn new(n: usize) -> Self;
7 fn len(&self) -> usize;
9 fn is_empty(&self) -> bool { self.len() == 0 }
11 fn unite(&mut self, u: usize, v: usize) -> bool;
15 fn repr(&self, u: usize) -> usize;
17 fn count(&self, u: usize) -> usize;
19 fn equiv(&self, u: usize, v: usize) -> bool { self.repr(u) == self.repr(v) }
21 fn subset(&self, u: usize) -> Vec<usize> {
23 (0..self.len()).filter(|&v| self.equiv(u, v)).collect()
24 }
25 fn partition(&self) -> Vec<Vec<usize>> {
29 let mut res = vec![vec![]; self.len()];
30 for i in 0..self.len() {
31 res[self.repr(i)].push(i);
32 }
33 res
34 }
35}