public void ArgumentOutOfRangeInMethodTest(int u, int v)
        {
            const int length = 6;
            var       sut    = new LowestCommonAncestor(length);

            Assert.Throws <ArgumentOutOfRangeException>(() => sut.AddEdge(u, v));
            Assert.Throws <ArgumentOutOfRangeException>(() => _ = sut.Find(u, v));
            Assert.Throws <ArgumentOutOfRangeException>(() => _ = sut.GetDistance(u, v));
            Assert.Throws <ArgumentOutOfRangeException>(() => _ = sut.GetCost(u, v));
            Assert.Throws <ArgumentOutOfRangeException>(() => _ = sut.GetCost(u, v, 7));
            if (v < 0 || length <= v)
            {
                return;
            }
            Assert.Throws <ArgumentOutOfRangeException>(() => _ = sut.GetAncestor(u, 0));
        }
Пример #2
0
        public static void Solve()
        {
            var(N, X) = Scanner.Scan <int, int>();
            var tree = new LowestCommonAncestor(N);

            for (var i = 0; i < N - 1; i++)
            {
                var(a, b, c) = Scanner.Scan <int, int, long>();
                a--; b--;
                tree.AddEdge(a, b, c);
            }

            for (var i = 0; i < N; i++)
            {
                for (var j = 0; j < N; j++)
                {
                    if (tree.GetCost(i, j) == X)
                    {
                        Console.WriteLine("Yes");
                        return;
                    }
                }
            }

            Console.WriteLine("No");
        }
        public void GetDistanceAndCostTest(int u, int v, int c)
        {
            const int n = 6;

            for (var i = 0; i < n; i++)
            {
                var sut = new LowestCommonAncestor(6, i);
                sut.AddEdge(0, 1);
                sut.AddEdge(0, 2);
                sut.AddEdge(1, 3);
                sut.AddEdge(1, 4);
                sut.AddEdge(2, 5);

                Assert.That(sut.GetDistance(u, v), Is.EqualTo(c));
                Assert.That(sut.GetDistance(v, u), Is.EqualTo(c));
                Assert.That(sut.GetCost(u, v), Is.EqualTo(c));
                Assert.That(sut.GetCost(v, u), Is.EqualTo(c));
            }
        }
        public void GetCostTest(int u, int v, int c)
        {
            const int n = 6;
            const int m = 7;

            for (var i = 0; i < n; i++)
            {
                var sut = new LowestCommonAncestor(n, i);
                sut.AddEdge(0, 1, 1);
                sut.AddEdge(0, 2, 3);
                sut.AddEdge(2, 3, 5);
                sut.AddEdge(2, 4, 2);
                sut.AddEdge(3, 5, 7);

                Assert.That(sut.GetCost(u, v), Is.EqualTo(c));
                Assert.That(sut.GetCost(u, v, m), Is.EqualTo(c % m));
                Assert.That(sut.GetCost(v, u), Is.EqualTo(c));
            }
        }