test/cpv/library-checker-graph/scc.tarjan.cpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // competitive-verifier: PROBLEM https://judge.yosupo.jp/problem/scc | ||
| 2 | #include "../../../src/graph/scc/tarjan/lib.hpp" | ||
| 3 | #include "../../../src/io/container/lib.hpp" | ||
| 4 | |||
| 5 | using namespace tifa_libs; | ||
| 6 | 12 | int main() { | |
| 7 |
1/2✓ Branch 2 taken 12 times.
✗ Branch 3 not taken.
|
12 | std::cin.tie(nullptr)->std::ios::sync_with_stdio(false); |
| 8 | u32 n, m; | ||
| 9 |
2/4✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
|
12 | std::cin >> n >> m; |
| 10 | |||
| 11 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
12 | vvecu e(n); |
| 12 |
2/2✓ Branch 0 taken 4208808 times.
✓ Branch 1 taken 12 times.
|
4208820 | for (u32 i = 0, u, v; i < m; ++i) { |
| 13 |
2/4✓ Branch 1 taken 4208808 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 4208808 times.
✗ Branch 5 not taken.
|
4208808 | std::cin >> u >> v; |
| 14 |
1/2✓ Branch 2 taken 4208808 times.
✗ Branch 3 not taken.
|
4208808 | e[u].push_back(v); |
| 15 | } | ||
| 16 | 12 | tarjan scc; | |
| 17 | 12 | scc.build(e); | |
| 18 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
24 | vvecu g(scc.id); |
| 19 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
12 | vecu in(scc.id); |
| 20 |
2/2✓ Branch 0 taken 4490130 times.
✓ Branch 1 taken 12 times.
|
4490142 | for (u32 i = 0, x, y; i < n; ++i) |
| 21 |
2/2✓ Branch 6 taken 4208808 times.
✓ Branch 7 taken 4490130 times.
|
8698938 | for (auto v : e[i]) |
| 22 |
3/4✓ Branch 2 taken 3444616 times.
✓ Branch 3 taken 764192 times.
✓ Branch 6 taken 3444616 times.
✗ Branch 7 not taken.
|
4208808 | if ((x = scc.scc_id[i]) != (y = scc.scc_id[v])) g[x].push_back(y), ++in[y]; |
| 23 |
1/2✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
|
12 | std::queue<u32> q; |
| 24 |
2/2✓ Branch 0 taken 4054667 times.
✓ Branch 1 taken 12 times.
|
4054679 | for (u32 i = 0; i < scc.id; ++i) |
| 25 |
3/4✓ Branch 1 taken 1843558 times.
✓ Branch 2 taken 2211109 times.
✓ Branch 4 taken 1843558 times.
✗ Branch 5 not taken.
|
4054667 | if (!in[i]) q.push(i); |
| 26 |
2/4✓ Branch 1 taken 12 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 12 times.
✗ Branch 5 not taken.
|
12 | std::cout << scc.id << '\n'; |
| 27 |
2/2✓ Branch 1 taken 4054667 times.
✓ Branch 2 taken 12 times.
|
4054679 | while (!q.empty()) { |
| 28 | 4054667 | u32 u = q.front(); | |
| 29 | 4054667 | q.pop(); | |
| 30 |
3/6✓ Branch 3 taken 4054667 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 4054667 times.
✗ Branch 7 not taken.
✓ Branch 11 taken 4054667 times.
✗ Branch 12 not taken.
|
4054667 | std::cout << scc.belongs[u].size() << ' ' << scc.belongs[u] << '\n'; |
| 31 |
2/2✓ Branch 6 taken 3444616 times.
✓ Branch 7 taken 4054667 times.
|
7499283 | for (auto v : g[u]) { |
| 32 | 3444616 | --in[v]; | |
| 33 |
3/4✓ Branch 1 taken 2211109 times.
✓ Branch 2 taken 1233507 times.
✓ Branch 4 taken 2211109 times.
✗ Branch 5 not taken.
|
3444616 | if (!in[v]) q.push(v); |
| 34 | } | ||
| 35 | } | ||
| 36 | 12 | return 0; | |
| 37 | 12 | } | |
| 38 |