11#pragma once
22#include " ../../library/contest/random.hpp"
3- #include " ../../library/graphs/scc /add_edges_strongly_connected.hpp"
4- #include " ../../library/graphs/scc /offline_incremental_scc.hpp"
3+ #include " ../../library/graphs/strongly_connected_components /add_edges_strongly_connected.hpp"
4+ #include " ../../library/graphs/strongly_connected_components /offline_incremental_scc.hpp"
55void scc_asserts (const vector<vector<int >>& adj) {
66 int n = sz (adj);
77 auto [num_sccs, scc_id] = sccs (adj);
@@ -10,8 +10,7 @@ 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 ),
14- is_zero_out (num_sccs, 1 );
13+ vector<bool > is_zero_in (num_sccs, 1 ), is_zero_out (num_sccs, 1 );
1514 for (int i = 0 ; i < n; i++) {
1615 for (int v : adj[i]) {
1716 if (scc_id[i] == scc_id[v]) continue ;
@@ -21,14 +20,13 @@ void scc_asserts(const vector<vector<int>>& adj) {
2120 }
2221 // since {num_sccs-1, ..., 2, 1, 0} is a topo order
2322 assert (is_zero_in[num_sccs - 1 ] && is_zero_out[0 ]);
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));
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));
3230 vector<vector<int >> adj_copy (adj);
3331 for (auto [u, v] : edges) {
3432 assert (u != v);
0 commit comments