| 2 | vector<bool> visited; |
| 3 | vi order; |
| 4 | void scc_dfs(const vvi &adj, int u) { |
| 5 | int v; visited[u] = true; |
| 6 | rep(i,0,size(adj[u])) |
| 7 | if (!visited[v = adj[u][i]]) scc_dfs(adj, v); |
| 8 | order.push_back(u); } |
| 9 | pair<union_find, vi> scc(const vvi &adj) { |
| 10 | int n = size(adj), u, v; |
| 11 | order.clear(); |