From fe7db3da0051dd7a4973e10966cc08b30687fa37 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Thu, 14 Aug 2025 09:55:55 -0600 Subject: [PATCH 1/7] add grep for it --- tests/scripts/grep_clangformat_cppcheck.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/scripts/grep_clangformat_cppcheck.sh b/tests/scripts/grep_clangformat_cppcheck.sh index 631f9d27..70cf8669 100755 --- a/tests/scripts/grep_clangformat_cppcheck.sh +++ b/tests/scripts/grep_clangformat_cppcheck.sh @@ -32,6 +32,9 @@ grep "ssize" --recursive ../library/ && exit 1 echo "check vi instead of vector" grep "vector" --recursive ../library/**/*.hpp && exit 1 +echo "check no basic_string" +grep "basic_string" --recursive ../library/**/*.hpp library_checker_aizu_tests/**/*.test.cpp && exit 1 + echo "check begin(arr) instead of arr.begin(), similarly for end, rbegin, rend, empty, size:" # TODO: remove this define filter if/when we move to -std=c++20 grep --invert-match --fixed-strings "#define" --recursive ../library/ library_checker_aizu_tests/ | From 85364d07fe92f355ea7ee4cf27b57844c6b7be0e Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Thu, 14 Aug 2025 10:00:34 -0600 Subject: [PATCH 2/7] don't check comments for it --- tests/scripts/grep_clangformat_cppcheck.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/scripts/grep_clangformat_cppcheck.sh b/tests/scripts/grep_clangformat_cppcheck.sh index 70cf8669..6b64a049 100755 --- a/tests/scripts/grep_clangformat_cppcheck.sh +++ b/tests/scripts/grep_clangformat_cppcheck.sh @@ -33,7 +33,7 @@ echo "check vi instead of vector" grep "vector" --recursive ../library/**/*.hpp && exit 1 echo "check no basic_string" -grep "basic_string" --recursive ../library/**/*.hpp library_checker_aizu_tests/**/*.test.cpp && exit 1 +grep "[[:space:]]*//\!" --recursive --invert-match ../library/**/*.hpp library_checker_aizu_tests/**/*.test.cpp | grep "basic_string" && exit 1 echo "check begin(arr) instead of arr.begin(), similarly for end, rbegin, rend, empty, size:" # TODO: remove this define filter if/when we move to -std=c++20 From 0a42f021c8e9838e965f048b9e647482a11423cc Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Thu, 14 Aug 2025 10:02:34 -0600 Subject: [PATCH 3/7] nits --- library/trees/linear_lca.hpp | 2 +- tests/scripts/grep_clangformat_cppcheck.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/library/trees/linear_lca.hpp b/library/trees/linear_lca.hpp index 01b0c029..e2064b4f 100644 --- a/library/trees/linear_lca.hpp +++ b/library/trees/linear_lca.hpp @@ -14,7 +14,7 @@ int lsb(int x) { return x & -x; } struct linear_lca { int n; vi d, in, asc, head; - linear_lca(const auto& adj): + linear_lca(const vector>& adj): n(sz(adj)), d(n), in(n), asc(n), head(n + 1) { vector order; auto dfs = [&](auto&& self, int v, int p) -> void { diff --git a/tests/scripts/grep_clangformat_cppcheck.sh b/tests/scripts/grep_clangformat_cppcheck.sh index 6b64a049..56c9863f 100755 --- a/tests/scripts/grep_clangformat_cppcheck.sh +++ b/tests/scripts/grep_clangformat_cppcheck.sh @@ -32,7 +32,7 @@ grep "ssize" --recursive ../library/ && exit 1 echo "check vi instead of vector" grep "vector" --recursive ../library/**/*.hpp && exit 1 -echo "check no basic_string" +echo "check no basic_string, excluding @code example inits" grep "[[:space:]]*//\!" --recursive --invert-match ../library/**/*.hpp library_checker_aizu_tests/**/*.test.cpp | grep "basic_string" && exit 1 echo "check begin(arr) instead of arr.begin(), similarly for end, rbegin, rend, empty, size:" From 839291ebc78f087fb7c838068cc2bae7cf4fcb7e Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Thu, 14 Aug 2025 10:04:13 -0600 Subject: [PATCH 4/7] revert --- library/trees/linear_lca.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/trees/linear_lca.hpp b/library/trees/linear_lca.hpp index e2064b4f..01b0c029 100644 --- a/library/trees/linear_lca.hpp +++ b/library/trees/linear_lca.hpp @@ -14,7 +14,7 @@ int lsb(int x) { return x & -x; } struct linear_lca { int n; vi d, in, asc, head; - linear_lca(const vector>& adj): + linear_lca(const auto& adj): n(sz(adj)), d(n), in(n), asc(n), head(n + 1) { vector order; auto dfs = [&](auto&& self, int v, int p) -> void { From 116a05459653c3761987b8c8644d34bbf8e86887 Mon Sep 17 00:00:00 2001 From: GitHub Date: Thu, 14 Aug 2025 16:04:25 +0000 Subject: [PATCH 5/7] [auto-verifier] verify commit 0a42f021c8e9838e965f048b9e647482a11423cc --- .verify-helper/timestamps.remote.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/.verify-helper/timestamps.remote.json b/.verify-helper/timestamps.remote.json index 95dce9fb..b04fd62b 100644 --- a/.verify-helper/timestamps.remote.json +++ b/.verify-helper/timestamps.remote.json @@ -132,9 +132,6 @@ "tests/library_checker_aizu_tests/trees/edge_cd_count_paths_per_length.test.cpp": "2025-08-06 13:48:07 -0600", "tests/library_checker_aizu_tests/trees/edge_cd_reroot_dp.test.cpp": "2025-04-27 21:47:37 -0600", "tests/library_checker_aizu_tests/trees/kth_path_ladder.test.cpp": "2025-08-06 12:42:13 -0600", -"tests/library_checker_aizu_tests/trees/kth_path_linear.test.cpp": "2025-08-06 12:42:13 -0600", "tests/library_checker_aizu_tests/trees/kth_path_tree_lift.test.cpp": "2025-08-06 12:42:13 -0600", -"tests/library_checker_aizu_tests/trees/lca_all_methods_aizu.test.cpp": "2025-08-06 12:42:13 -0600", -"tests/library_checker_aizu_tests/trees/lca_all_methods_lib_checker.test.cpp": "2025-08-06 12:42:13 -0600", "tests/library_checker_aizu_tests/trees/subtree_isomorphism.test.cpp": "2025-08-06 12:42:13 -0600" } \ No newline at end of file From 6e871ace06a34231f199f21d1f0906ef75bdbf9c Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Thu, 14 Aug 2025 10:08:10 -0600 Subject: [PATCH 6/7] revert back to vector --- .../graphs/bcc_callback_aizu_bcc.test.cpp | 8 ++++---- .../graphs/bcc_callback_aizu_two_edge_cc.test.cpp | 8 ++++---- .../graphs/bcc_callback_lib_checker_bcc.test.cpp | 8 ++++---- .../graphs/bcc_callback_lib_checker_two_cc.test.cpp | 10 +++++----- .../trees/edge_cd_reroot_dp.test.cpp | 4 ++-- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/tests/library_checker_aizu_tests/graphs/bcc_callback_aizu_bcc.test.cpp b/tests/library_checker_aizu_tests/graphs/bcc_callback_aizu_bcc.test.cpp index 06c22f00..02d52421 100644 --- a/tests/library_checker_aizu_tests/graphs/bcc_callback_aizu_bcc.test.cpp +++ b/tests/library_checker_aizu_tests/graphs/bcc_callback_aizu_bcc.test.cpp @@ -6,13 +6,13 @@ int main() { cin.tie(0)->sync_with_stdio(0); int n, m; cin >> n >> m; - vector> adj(n); - for (int i = 0; i < n; i++) adj[i] += i; + vector> adj(n); + for (int i = 0; i < n; i++) adj[i].push_back(i); for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; - adj[u] += v; - adj[v] += u; + adj[u].push_back(v); + adj[v].push_back(u); } vi cnt(n); bcc_callback(adj, [&](const vi& nodes) { diff --git a/tests/library_checker_aizu_tests/graphs/bcc_callback_aizu_two_edge_cc.test.cpp b/tests/library_checker_aizu_tests/graphs/bcc_callback_aizu_two_edge_cc.test.cpp index 290a3f35..94e5ae3c 100644 --- a/tests/library_checker_aizu_tests/graphs/bcc_callback_aizu_two_edge_cc.test.cpp +++ b/tests/library_checker_aizu_tests/graphs/bcc_callback_aizu_two_edge_cc.test.cpp @@ -6,13 +6,13 @@ int main() { cin.tie(0)->sync_with_stdio(0); int n, m; cin >> n >> m; - vector> adj(n); - for (int i = 0; i < n; i++) adj[i] += i; + vector adj(n); + for (int i = 0; i < n; i++) adj[i].push_back(i); for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; - adj[u] += v; - adj[v] += u; + adj[u].push_back(v); + adj[v].push_back(u); } vector bridges; bcc_callback(adj, [&](const vi& nodes) { diff --git a/tests/library_checker_aizu_tests/graphs/bcc_callback_lib_checker_bcc.test.cpp b/tests/library_checker_aizu_tests/graphs/bcc_callback_lib_checker_bcc.test.cpp index bfeb9dd6..52771ee3 100644 --- a/tests/library_checker_aizu_tests/graphs/bcc_callback_lib_checker_bcc.test.cpp +++ b/tests/library_checker_aizu_tests/graphs/bcc_callback_lib_checker_bcc.test.cpp @@ -6,13 +6,13 @@ int main() { cin.tie(0)->sync_with_stdio(0); int n, m; cin >> n >> m; - vector> adj(n); - for (int i = 0; i < n; i++) adj[i] += i; + vector> adj(n); + for (int i = 0; i < n; i++) adj[i].push_back(i); for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; - adj[u] += v; - adj[v] += u; + adj[u].push_back(v); + adj[v].push_back(u); } vector vis(n, 0); vector> all_bccs; diff --git a/tests/library_checker_aizu_tests/graphs/bcc_callback_lib_checker_two_cc.test.cpp b/tests/library_checker_aizu_tests/graphs/bcc_callback_lib_checker_two_cc.test.cpp index 7038e7b2..061b302f 100644 --- a/tests/library_checker_aizu_tests/graphs/bcc_callback_lib_checker_two_cc.test.cpp +++ b/tests/library_checker_aizu_tests/graphs/bcc_callback_lib_checker_two_cc.test.cpp @@ -7,12 +7,12 @@ int main() { cin.tie(0)->sync_with_stdio(0); int n, m; cin >> n >> m; - vector> adj(n); + vector adj(n); for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; - adj[u] += v; - adj[v] += u; + adj[u].push_back(v); + adj[v].push_back(u); } UF uf(n); vector seen(n); @@ -30,8 +30,8 @@ int main() { } for (int v : nodes) uf.join(v, nodes[0]); }); - vector> two_edge_ccs(n); - rep(i, 0, n) two_edge_ccs[uf.find(i)] += i; + vector two_edge_ccs(n); + rep(i, 0, n) two_edge_ccs[uf.find(i)].push_back(i); int cnt_ccs = 0; rep(i, 0, n) cnt_ccs += (!empty(two_edge_ccs[i])); cout << cnt_ccs << '\n'; diff --git a/tests/library_checker_aizu_tests/trees/edge_cd_reroot_dp.test.cpp b/tests/library_checker_aizu_tests/trees/edge_cd_reroot_dp.test.cpp index 382ca988..8334678c 100644 --- a/tests/library_checker_aizu_tests/trees/edge_cd_reroot_dp.test.cpp +++ b/tests/library_checker_aizu_tests/trees/edge_cd_reroot_dp.test.cpp @@ -14,7 +14,7 @@ int main() { cin >> a[i]; res[i] = a[i]; } - vector> adj(n); + vector adj(n); vector b(n - 1), c(n - 1); vector> par(n, {-1, -1}); vector> base_adj(n); @@ -47,7 +47,7 @@ int main() { }; { edge_cd(base_adj, edge_cd_asserts); } edge_cd(adj, - [&](const vector>& cd_adj, int cent, + [&](const vector& cd_adj, int cent, int split) -> void { array>, 2> all_backwards; array sum_forward = {0, 0}; From a3a9b1fb5ff164404581be23663626ea56898922 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Thu, 14 Aug 2025 10:13:46 -0600 Subject: [PATCH 7/7] remove double example inits --- library/graphs/dijkstra.hpp | 4 ---- library/graphs/hopcroft_karp.hpp | 7 +------ library/graphs/scc.hpp | 4 ---- library/graphs/uncommon/block_vertex_tree.hpp | 6 ------ library/graphs/uncommon/bridge_tree.hpp | 5 ----- library/graphs/uncommon/bridges.hpp | 4 ---- library/graphs/uncommon/complement_graph_ccs.hpp | 4 ---- library/graphs/uncommon/cuts.hpp | 4 ---- library/trees/centroid_decomp.hpp | 6 ------ library/trees/edge_cd.hpp | 5 ----- library/trees/lca_rmq.hpp | 4 ---- library/trees/linear_kth_par.hpp | 4 ---- library/trees/linear_lca.hpp | 4 ---- library/trees/tree_lift.hpp | 5 +---- library/trees/uncommon/subtree_isomorphism.hpp | 5 ----- 15 files changed, 2 insertions(+), 69 deletions(-) diff --git a/library/graphs/dijkstra.hpp b/library/graphs/dijkstra.hpp index b9995eb2..c5c4ec40 100644 --- a/library/graphs/dijkstra.hpp +++ b/library/graphs/dijkstra.hpp @@ -1,9 +1,5 @@ #pragma once //! @code -//! { -//! vector>> adj(n); -//! auto d = dijkstra(adj, source); -//! } //! vector>> adj(n); //! auto d = dijkstra(adj, source); //! @endcode diff --git a/library/graphs/hopcroft_karp.hpp b/library/graphs/hopcroft_karp.hpp index 8b63b7e0..9d504347 100644 --- a/library/graphs/hopcroft_karp.hpp +++ b/library/graphs/hopcroft_karp.hpp @@ -1,14 +1,9 @@ #pragma once //! https://github.com/foreverbell/acm-icpc-cheat-sheet/blob/master/src/graph-algorithm/hopcroft-karp.cpp //! @code -//! { -//! vector adj(lsz); -//! auto [matching_size, to_r, to_l, -//! mvc_l, mvc_r] = hopcroft_karp(adj, rsz); -//! } //! vector> adj(lsz); //! adj[l] += r; // add edge l <-> r -//! // 0<=l adj(n); -//! auto [num_sccs, scc_id] = sccs(adj); -//! } //! vector> adj(n); //! auto [num_sccs, scc_id] = sccs(adj); //! @endcode diff --git a/library/graphs/uncommon/block_vertex_tree.hpp b/library/graphs/uncommon/block_vertex_tree.hpp index 5a027e4f..e69b839f 100644 --- a/library/graphs/uncommon/block_vertex_tree.hpp +++ b/library/graphs/uncommon/block_vertex_tree.hpp @@ -1,12 +1,6 @@ #pragma once #include "cuts.hpp" //! @code -//! { -//! vector> adj(n); -//! auto [num_bccs, bcc_id, is_cut] = cuts(adj, m); -//! auto bvt = block_vertex_tree(adj, -//! num_bccs, bcc_id); -//! } //! vector>> adj(n); //! auto [num_bccs, bcc_id, is_cut] = cuts(adj, m); //! auto bvt = block_vertex_tree(adj, num_bccs, bcc_id); diff --git a/library/graphs/uncommon/bridge_tree.hpp b/library/graphs/uncommon/bridge_tree.hpp index e1c1f887..3386ef3e 100644 --- a/library/graphs/uncommon/bridge_tree.hpp +++ b/library/graphs/uncommon/bridge_tree.hpp @@ -1,11 +1,6 @@ #pragma once #include "bridges.hpp" //! @code -//! { -//! vector> adj(n); -//! auto [num_ccs, br_id, is_br] = bridges(adj, m); -//! auto bt = bridge_tree(adj, num_ccs, br_id, is_br); -//! } //! vector>> adj(n); //! auto [num_ccs, br_id, is_br] = bridges(adj, m); //! auto bt = bridge_tree(adj, num_ccs, br_id, is_br); diff --git a/library/graphs/uncommon/bridges.hpp b/library/graphs/uncommon/bridges.hpp index 5d1093d8..5b2ddcb5 100644 --- a/library/graphs/uncommon/bridges.hpp +++ b/library/graphs/uncommon/bridges.hpp @@ -1,10 +1,6 @@ #pragma once //! https://cp-algorithms.com/graph/bridge-searching.html //! @code -//! { -//! vector> adj(n); -//! auto [num_ccs, br_id, is_br] = bridges(adj, m); -//! } //! vector>> adj(n); //! rep (i, 0, m) { //! int u, v; diff --git a/library/graphs/uncommon/complement_graph_ccs.hpp b/library/graphs/uncommon/complement_graph_ccs.hpp index 79c0aba7..864a8de7 100644 --- a/library/graphs/uncommon/complement_graph_ccs.hpp +++ b/library/graphs/uncommon/complement_graph_ccs.hpp @@ -1,9 +1,5 @@ #pragma once //! @code -//! { -//! vector adj(n); -//! vi cc_id = get_complement_graph_ccs(adj); -//! } //! vector> adj; //! vi cc_id = get_complement_graph_ccs(adj); //! @endcode diff --git a/library/graphs/uncommon/cuts.hpp b/library/graphs/uncommon/cuts.hpp index 0a636e06..1f7068a0 100644 --- a/library/graphs/uncommon/cuts.hpp +++ b/library/graphs/uncommon/cuts.hpp @@ -1,10 +1,6 @@ #pragma once //! https://cp-algorithms.com/graph/cutpoints.html //! @code -//! { -//! vector> adj(n); -//! auto [num_bccs, bcc_id, is_cut] = cuts(adj, m); -//! } //! vector>> adj(n); //! rep (i, 0, m) { //! int u, v; diff --git a/library/trees/centroid_decomp.hpp b/library/trees/centroid_decomp.hpp index 2429168e..3cd5d12d 100644 --- a/library/trees/centroid_decomp.hpp +++ b/library/trees/centroid_decomp.hpp @@ -1,11 +1,5 @@ #pragma once //! @code -//! { -//! vector adj(n); -//! centroid(adj, [&](const auto& adj, -//! int cent, int par_cent) { -//! }); -//! } //! vector> adj(n); //! centroid(adj, [&](const auto& adj, //! int cent, int par_cent) {}); diff --git a/library/trees/edge_cd.hpp b/library/trees/edge_cd.hpp index b327f938..e3ec20cd 100644 --- a/library/trees/edge_cd.hpp +++ b/library/trees/edge_cd.hpp @@ -4,11 +4,6 @@ //! https://codeforces.com/blog/entry/142176 //! https://youtu.be/wDwaMo5xa-k //! @code -//! { -//! vector adj(n); -//! edge_cd(adj, [&](const auto& adj, -//! int cent, int m) {}); -//! } //! vector> adj(n); //! edge_cd(adj, [&](const auto& adj, int cent, int m) { //! // subtrees of [0, m) of adj[cent]: 1st edge-set diff --git a/library/trees/lca_rmq.hpp b/library/trees/lca_rmq.hpp index def6c02c..5db4bd4b 100644 --- a/library/trees/lca_rmq.hpp +++ b/library/trees/lca_rmq.hpp @@ -3,10 +3,6 @@ #include "../data_structures/rmq.hpp" //! https://github.com/kth-competitive-programming/kactl/blob/main/content/graph/LCA.h //! @code -//! { -//! vector adj(n); -//! LCA lca(adj); -//! } //! vector> adj(n); //! LCA lca(adj); //! @endcode diff --git a/library/trees/linear_kth_par.hpp b/library/trees/linear_kth_par.hpp index 5b8020ec..06da2df8 100644 --- a/library/trees/linear_kth_par.hpp +++ b/library/trees/linear_kth_par.hpp @@ -1,10 +1,6 @@ #pragma once //! https://codeforces.com/blog/entry/126580 //! @code -//! { -//! vector adj(n); -//! linear_kth_par kp(adj); -//! } //! vector> adj(n); //! linear_kth_par kp(adj); //! kp.kth_par(v, k); // k edges up from v diff --git a/library/trees/linear_lca.hpp b/library/trees/linear_lca.hpp index 01b0c029..e13aa92d 100644 --- a/library/trees/linear_lca.hpp +++ b/library/trees/linear_lca.hpp @@ -1,10 +1,6 @@ #pragma once //! https://codeforces.com/blog/entry/125371 //! @code -//! { -//! vector adj(n); -//! linear_lca llca(adj); -//! } //! vector> adj(n); //! linear_lca llca(adj); //! @endcode diff --git a/library/trees/tree_lift.hpp b/library/trees/tree_lift.hpp index fa0b10d2..3a6e574b 100644 --- a/library/trees/tree_lift.hpp +++ b/library/trees/tree_lift.hpp @@ -1,13 +1,10 @@ #pragma once //! https://github.com/ucf-programming-team/hackpack-cpp/blob/master/content/graphs/TreeLifting.h //! @code -//! { -//! vector adj(n); -//! tree_lift tree_l(adj); -//! } //! vector> adj(n); //! tree_lift tree_l(adj); //! tree_l.kth_par(v, k); // k edges up from v +//! tree_l.kth_par(v, 1); // v's parent //! @endcode //! @time O(n + q log n) //! @space O(n) diff --git a/library/trees/uncommon/subtree_isomorphism.hpp b/library/trees/uncommon/subtree_isomorphism.hpp index 708604a4..784421f3 100644 --- a/library/trees/uncommon/subtree_isomorphism.hpp +++ b/library/trees/uncommon/subtree_isomorphism.hpp @@ -1,10 +1,5 @@ #pragma once //! @code -//! { -//! vector adj(n); -//! auto [num_distinct_subtrees, iso_id] = -//! subtree_iso(adj); -//! } //! vector> adj(n); //! auto [num_distinct_subtrees, iso_id] = //! subtree_iso(adj);