GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 18 / 0 / 18
Functions: 100.0% 3 / 0 / 3
Branches: 62.5% 25 / 0 / 40

src/ds/link_cut_tree/usage.cpp
Line Branch Exec Source
1 // competitive-verifier: PROBLEM https://judge.yosupo.jp/problem/dynamic_tree_vertex_add_subtree_sum/
2 // cplib.manager: PROBLEM https://judge.yosupo.jp/problem/dynamic_tree_vertex_add_subtree_sum/
3
4 #include "lib.hpp"
5
6 using namespace tifa_libs;
7 833449144 auto op(u64 a, u64 b) { return a + b; }
8 32209624 auto inv_op(u64 a, u64 b) { return a - b; }
9
10 18 int main() {
11
1/2
✓ Branch 2 taken 18 times.
✗ Branch 3 not taken.
18 std::cin.tie(nullptr)->std::ios::sync_with_stdio(false);
12 u32 n, m;
13
2/4
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 18 times.
✗ Branch 5 not taken.
18 std::cin >> n >> m;
14
1/2
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
18 vecuu a(n);
15
3/4
✓ Branch 4 taken 1918537 times.
✗ Branch 5 not taken.
✓ Branch 8 taken 1918537 times.
✓ Branch 9 taken 18 times.
1918555 for (auto& x : a) std::cin >> x;
16
1/2
✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
18 link_cut_tree<u64, op, inv_op> lct(n, a);
17
4/6
✓ Branch 1 taken 1918519 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1918519 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1918519 times.
✓ Branch 8 taken 18 times.
1918537 for (u32 i = 1, u, v; i < n; ++i) std::cin >> u >> v, lct.link(u, v);
18
2/2
✓ Branch 0 taken 1947399 times.
✓ Branch 1 taken 18 times.
1947417 flt_ (u32, i, 0, m) {
19 u32 opt, u, v;
20
3/6
✓ Branch 1 taken 1947399 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1947399 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1947399 times.
✗ Branch 8 not taken.
1947399 std::cin >> opt >> u >> v;
21
2/2
✓ Branch 0 taken 650106 times.
✓ Branch 1 taken 1297293 times.
1947399 if (opt == 0) {
22 u32 p, q;
23
2/4
✓ Branch 1 taken 650106 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 650106 times.
✗ Branch 5 not taken.
650106 std::cin >> p >> q;
24 650106 lct.cut(u, v), lct.link(p, q);
25
2/2
✓ Branch 0 taken 648681 times.
✓ Branch 1 taken 648612 times.
1297293 } else if (opt == 1) lct.node_add(u, v);
26
2/4
✓ Branch 2 taken 648612 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 648612 times.
✗ Branch 6 not taken.
648612 else std::cout << lct.query_subtree(u, v).first << '\n';
27 }
28 18 return 0;
29 18 }
30
31 /*
32 给你一棵有 $N$ 个顶点的树. 它的边是 $(u_i, v_i)$. 第 $i$ 个顶点上有一个值 $a_i$
33 处理 $Q$ 个查询. 保证每次查询后的图是一棵树
34 - 0 $u$ $v$ $w$ $x$: 删除边 $(u, v)$ 并添加边 $(w, x)$
35 - 1 $p$ $x$: $a_p \gets a_p + x$
36 - 2 $v$ $p$: 对于边 $(v, p)$, 其中 $p$ 被认为是父节点, 输出 $v$ 子树中所有顶点权重的总和
37
38 ## 输入
39 $N$ $Q$
40 $a_0$ $a_1$ ... $a_{N - 1}$
41 $u_0$ $v_0$
42 $u_1$ $v_1$
43 :
44 $u_{N - 2}$ $v_{N - 2}$
45 $\textrm{Query}_0$
46 $\textrm{Query}_1$
47 :
48 $\textrm{Query}_{Q - 1}$
49 */
50
51 /*sample
52 5 7
53 1 10 100 1000 10000
54 0 1
55 1 2
56 2 3
57 1 4
58 2 1 2
59 1 1 100000
60 2 1 2
61 0 1 2 2 0
62 2 0 2
63 0 2 3 3 1
64 2 1 4
65 =======================
66 10011
67 110011
68 110011
69 101111
70 */
71