@@ -10,7 +10,8 @@ void scc_asserts(const vector<vector<int>>& adj) {
1010 for (int i = 0 ; i < n; i++)
1111 for (auto j : adj[i]) assert (scc_id[i] >= scc_id[j]);
1212 }
13- vector<bool > is_zero_in (num_sccs, 1 ), is_zero_out (num_sccs, 1 );
13+ vector<bool > is_zero_in (num_sccs, 1 ),
14+ is_zero_out (num_sccs, 1 );
1415 for (int i = 0 ; i < n; i++) {
1516 for (int v : adj[i]) {
1617 if (scc_id[i] == scc_id[v]) continue ;
@@ -20,13 +21,14 @@ void scc_asserts(const vector<vector<int>>& adj) {
2021 }
2122 // since {num_sccs-1, ..., 2, 1, 0} is a topo order
2223 assert (is_zero_in[num_sccs - 1 ] && is_zero_out[0 ]);
23- int num_zero_in = int (count (begin (is_zero_in), end (is_zero_in), 1 ));
24- int num_zero_out = int (count (begin (is_zero_out), end (is_zero_out), 1 ));
25- vector<pair<int , int >> edges = extra_edges (adj, num_sccs, scc_id);
26- if (num_sccs == 1 )
27- assert (sz (edges) == 0 );
28- else
29- assert (sz (edges) == max (num_zero_in, num_zero_out));
24+ int num_zero_in =
25+ int (count (begin (is_zero_in), end (is_zero_in), 1 ));
26+ int num_zero_out =
27+ int (count (begin (is_zero_out), end (is_zero_out), 1 ));
28+ vector<pair<int , int >> edges =
29+ extra_edges (adj, num_sccs, scc_id);
30+ if (num_sccs == 1 ) assert (sz (edges) == 0 );
31+ else assert (sz (edges) == max (num_zero_in, num_zero_out));
3032 vector<vector<int >> adj_copy (adj);
3133 for (auto [u, v] : edges) {
3234 assert (u != v);
0 commit comments