Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        public void Zero()
        {
            var uf = new IntWeightedUnionFind(0);

            uf.Groups().Should().Equal(Array.Empty <int[]>());
        }