Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }