public static long Calc(int n) { n >>= 3; long ans = 0; var graph = new SCCGraph(n); for (int i = 0; i < n; i++) { graph.AddEdge(i, (int)((1000000007L * i) % n)); } ans = graph.SCC().Length; return(ans); }
public override IEnumerable <object> Solve(TextReader inputStream) { var(nodeCount, edgeCount) = inputStream.ReadValue <int, int>(); var graph = new SCCGraph(nodeCount); for (int i = 0; i < edgeCount; i++) { var(u, v) = inputStream.ReadValue <int, int>(); graph.AddEdge(u, v); } var sccs = graph.SCC(); yield return(sccs.Count); foreach (var scc in sccs) { yield return($"{scc.Count} {scc.Join(' ')}"); } }