public void Simple() { var uf = new UnionFind <int>(new int[2] { 1, 2 }, (a, b) => a + b); uf.Same(0, 1).Should().BeFalse(); uf.Data(0).Should().Be(1); uf.Data(1).Should().Be(2); uf.Merge(0, 1).Should().BeTrue(); uf.Same(0, 1).Should().BeTrue(); uf.Size(0).Should().Be(2); uf.Data(0).Should().Be(3); uf.Data(1).Should().Be(3); }
public void LineReverse() { int n = 500000; var uf = new UnionFind <long>(Enumerable.Range(0, n).Select(a => (long)a).ToArray(), (a, b) => a + b); for (int i = n - 2; i >= 0; i--) { uf.Merge(i, i + 1); } uf.Size(0).Should().Be(n); uf.Groups().Should().HaveCount(1); uf.Data(0).Should().Be((long)n * (n - 1) / 2); }