test/cpv/library-checker-datastructure/persistent_unionfind.cpp
| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // competitive-verifier: PROBLEM https://judge.yosupo.jp/problem/persistent_unionfind | ||
| 2 | #include "../../../src/ds/dsu/pd/lib.hpp" | ||
| 3 | |||
| 4 | using namespace tifa_libs; | ||
| 5 | CEXP usz Q = 200005; | ||
| 6 | |||
| 7 | 14 | int main() { | |
| 8 |
1/2✓ Branch 2 taken 14 times.
✗ Branch 3 not taken.
|
14 | std::cin.tie(nullptr)->std::ios::sync_with_stdio(false); |
| 9 | u32 n, q; | ||
| 10 |
2/4✓ Branch 1 taken 14 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 14 times.
✗ Branch 5 not taken.
|
14 | std::cin >> n >> q; |
| 11 |
2/4✓ Branch 1 taken 14 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 14 times.
✗ Branch 5 not taken.
|
42 | vvec<pt3u> tr(Q), qry(Q); |
| 12 | 14 | std::bitset<Q> ans; | |
| 13 | 14 | u32 cnt = 0; | |
| 14 |
2/2✓ Branch 0 taken 1942715 times.
✓ Branch 1 taken 14 times.
|
1942729 | flt_ (u32, i, 1, q + 1) { |
| 15 | u32 t, u, v; | ||
| 16 | i32 k; | ||
| 17 |
4/8✓ Branch 1 taken 1942715 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1942715 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1942715 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1942715 times.
✗ Branch 11 not taken.
|
1942715 | std::cin >> t >> k >> u >> v; |
| 18 | 1942715 | ++k; | |
| 19 |
2/2✓ Branch 0 taken 970993 times.
✓ Branch 1 taken 971722 times.
|
1942715 | if (t == 0) |
| 20 |
1/2✓ Branch 2 taken 970993 times.
✗ Branch 3 not taken.
|
970993 | tr[(u32)k].emplace_back(i, u, v); |
| 21 | else | ||
| 22 |
1/2✓ Branch 2 taken 971722 times.
✗ Branch 3 not taken.
|
971722 | qry[(u32)k].emplace_back(cnt++, u, v); |
| 23 | } | ||
| 24 | 14 | dsu_pd dsu(n + 1); | |
| 25 | 971007 | auto dfs = [&](auto&& dfs, u32 v) -> void { | |
| 26 |
2/2✓ Branch 10 taken 971722 times.
✓ Branch 11 taken 971007 times.
|
1942729 | for (auto [i, x, y] : qry[v]) ans[i] = dsu.same(x, y); |
| 27 |
2/2✓ Branch 6 taken 970993 times.
✓ Branch 7 taken 971007 times.
|
1942000 | for (auto [_, x, y] : tr[v]) { |
| 28 | 970993 | auto t = dsu.time(); | |
| 29 | 970993 | dsu.merge(x, y); | |
| 30 |
1/2✓ Branch 1 taken 970993 times.
✗ Branch 2 not taken.
|
970993 | dfs(dfs, _); |
| 31 | 970993 | dsu.rollback(t); | |
| 32 | } | ||
| 33 | 971007 | }; | |
| 34 |
1/2✓ Branch 1 taken 14 times.
✗ Branch 2 not taken.
|
14 | dfs(dfs, 0); |
| 35 |
4/6✓ Branch 3 taken 971722 times.
✗ Branch 4 not taken.
✓ Branch 6 taken 971722 times.
✗ Branch 7 not taken.
✓ Branch 9 taken 971722 times.
✓ Branch 10 taken 14 times.
|
971736 | flt_ (u32, i, 0, cnt) std::cout << ans[i] << '\n'; |
| 36 | 14 | return 0; | |
| 37 | 14 | } | |
| 38 |