public void Simple() { var uf = new IntWeightedUnionFind(2); uf.Same(0, 1).Should().BeFalse(); uf.Merge(0, 1, 5).Should().BeTrue(); uf.Same(0, 1).Should().BeTrue(); uf.Size(0).Should().Be(2); uf.WeightDiff(0, 1).Should().Be(5); uf.WeightDiff(1, 0).Should().Be(-5); }
public void LineReverse() { int n = 500000; var uf = new IntWeightedUnionFind(n); for (int i = n - 2; i >= 0; i--) { uf.Merge(i, i + 1, 1); } for (int i = 0; i < n; i++) { uf.WeightDiff(0, i).Should().Be(i); uf.WeightDiff(10, i).Should().Be(i - 10); } uf.Size(0).Should().Be(n); uf.Groups().Should().HaveCount(1); }