Пример #1
0
        static void Solver(TextReader reader, TextWriter writer)
        {
            int[] nq = reader.ReadLine().Split().Select(int.Parse).ToArray();
            (int n, int q) = (nq[0], nq[1]);
            var dsu = new DSU(n);

            for (int i = 0; i < q; i++)
            {
                int[] tuv = reader.ReadLine().Split().Select(int.Parse).ToArray();
                (int t, int u, int v) = (tuv[0], tuv[1], tuv[2]);
                if (t == 0)
                {
                    dsu.Merge(u, v);
                }
                else
                {
                    if (dsu.Same(u, v))
                    {
                        writer.WriteLine("1");
                    }
                    else
                    {
                        writer.WriteLine("0");
                    }
                }
            }
        }
Пример #2
0
        public void LineReverse()
        {
            int n  = 500000;
            var uf = new DSU(n);

            for (int i = n - 2; i >= 0; i--)
            {
                uf.Merge(i, i + 1);
            }
            uf.Size(0).Should().Be(n);
            uf.Groups().Should().HaveCount(1);
        }
Пример #3
0
        public void Simple()
        {
            var uf = new DSU(2);

            uf.Same(0, 1).Should().BeFalse();
            int x = uf.Merge(0, 1);

            uf.Leader(0).Should().Be(x);
            uf.Leader(1).Should().Be(x);
            uf.Same(0, 1).Should().BeTrue();
            uf.Size(0).Should().Be(2);
        }
Пример #4
0
        public void Line()
        {
            int n  = 500000;
            var uf = new DSU(n);

            for (int i = 0; i < n - 1; i++)
            {
                uf.Merge(i, i + 1);
            }
            uf.Size(0).Should().Be(n);
            uf.Groups().Should().HaveCount(1);
        }
Пример #5
0
        public void Zero()
        {
            var uf = new DSU(0);

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