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)); }
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)}"); } }
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); }
public void InvalidAddEdgeTest(int u, int v) { var scc = new StronglyConnectedComponent(2); Assert.Throws <ArgumentOutOfRangeException>(() => scc.AddEdge(u, v)); }