Beispiel #1
0
        public void EmptyTest()
        {
            var scc0 = new StronglyConnectedComponent(0);

            Assert.That(scc0.GetGraph().Count, Is.Zero);

            var scc1 = new StronglyConnectedComponent(0);

            Assert.That(scc1.GetGraph().Count, Is.Zero);
        }
Beispiel #2
0
        public void SimpleGraphTest()
        {
            var scc = new StronglyConnectedComponent(2);

            scc.AddEdge(0, 1);
            scc.AddEdge(1, 0);
            var graph = scc.GetGraph();

            Assert.That(graph.Count, Is.EqualTo(1));
        }
Beispiel #3
0
        public static void Solve()
        {
            var NM = Console.ReadLine().Split(" ").Select(int.Parse).ToArray();

            var(N, M) = (NM[0], NM[1]);
            var G = new StronglyConnectedComponent(N);

            for (var i = 0; i < M; i++)
            {
                var UV = Console.ReadLine().Split(" ").Select(int.Parse).ToArray();
                var(u, v) = (UV[0], UV[1]);
                G.AddEdge(u, v);
            }

            var scc = G.GetGraph();

            Console.WriteLine(scc.Count());
            foreach (var v in scc)
            {
                Console.WriteLine($"{v.Count()} {string.Join(" ", v)}");
            }
        }
Beispiel #4
0
        public static void Solve()
        {
            var(N, M) = Scanner.Scan <int, int>();
            var scc = new StronglyConnectedComponent(N);

            for (var i = 0; i < M; i++)
            {
                var(a, b) = Scanner.Scan <int, int>();
                a--; b--;
                scc.AddEdge(a, b);
            }

            var answer = 0L;

            foreach (var group in scc.GetGraph())
            {
                var c = (long)group.Count();
                answer += c * (c - 1) / 2;
            }

            Console.WriteLine(answer);
        }