From 97fcf309e174db5ecb3bb3ff1807799cc7265291 Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Sat, 14 Dec 2024 17:36:43 -0600 Subject: [PATCH 1/2] increase doc readability --- .../graphs/bridges_cuts/block_vertex_tree.hpp | 11 +++++++---- library/graphs/bridges_cuts/bridge_tree.hpp | 10 ++++++---- library/graphs/bridges_cuts/bridges.hpp | 13 +++++++------ library/graphs/bridges_cuts/cuts.hpp | 12 +++++++----- library/graphs/complement_graph_ccs.hpp | 8 +++++--- library/graphs/dijkstra.hpp | 8 +++++--- library/graphs/hopcroft_karp.hpp | 11 +++++++---- .../graphs/strongly_connected_components/scc.hpp | 8 +++++--- library/trees/centroid_decomp.hpp | 16 +++++++++------- library/trees/edge_cd.hpp | 16 +++++++++------- .../ladder_decomposition/linear_kth_par.hpp | 8 +++++--- library/trees/lca_rmq/lca_rmq.hpp | 8 +++++--- library/trees/linear_lca.hpp | 10 ++++++---- library/trees/subtree_isomorphism.hpp | 12 +++++++----- library/trees/tree_lift/tree_lift.hpp | 8 +++++--- 15 files changed, 95 insertions(+), 64 deletions(-) diff --git a/library/graphs/bridges_cuts/block_vertex_tree.hpp b/library/graphs/bridges_cuts/block_vertex_tree.hpp index a119ba72..12424470 100644 --- a/library/graphs/bridges_cuts/block_vertex_tree.hpp +++ b/library/graphs/bridges_cuts/block_vertex_tree.hpp @@ -1,12 +1,15 @@ #pragma once #include "cuts.hpp" //! @code -//! vector> adj(n); +//! { +//! vector> adj(n); +//! cuts cc(adj, m); +//! vector bvt = block_vertex_tree(adj, cc); +//! } +//! vector>> adj(n); //! cuts cc(adj, m); //! vector bvt = block_vertex_tree(adj, cc); -//! vector>> adj1(n); -//! cuts cc1(adj1, m); -//! vector bvt1 = block_vertex_tree(adj1, cc1); +//! //! //to loop over each unique bcc containing a node u: //! for (int bccid : bvt[v]) { //! bccid -= n; diff --git a/library/graphs/bridges_cuts/bridge_tree.hpp b/library/graphs/bridges_cuts/bridge_tree.hpp index 9b797a16..e567f246 100644 --- a/library/graphs/bridges_cuts/bridge_tree.hpp +++ b/library/graphs/bridges_cuts/bridge_tree.hpp @@ -1,12 +1,14 @@ #pragma once #include "bridges.hpp" //! @code -//! vector> adj(n); +//! { +//! vector> adj(n); +//! bridges br(adj, m); +//! vector bt = bridge_tree(adj, br); +//! } +//! vector>> adj(n); //! bridges br(adj, m); //! vector bt = bridge_tree(adj, br); -//! vector>> adj1(n); -//! bridges br1(adj1, m); -//! vector bt1 = bridge_tree(adj1, br1); //! @endcode //! @time O(n + m) //! @space O(n) diff --git a/library/graphs/bridges_cuts/bridges.hpp b/library/graphs/bridges_cuts/bridges.hpp index 80f075ed..0079dc31 100644 --- a/library/graphs/bridges_cuts/bridges.hpp +++ b/library/graphs/bridges_cuts/bridges.hpp @@ -1,18 +1,19 @@ #pragma once //! https://cp-algorithms.com/graph/bridge-searching.html //! @code -//! vector> adj(n); +//! { +//! vector> adj(n); +//! auto [num_ccs, is_bridge, br_id] = bridges(adj, m); +//! } +//! vector>> adj(n); //! rep (i, 0, m) { //! int u, v; //! cin >> u >> v; //! u--, v--; -//! adj[u].emplace_back(v, i); -//! adj[v].emplace_back(u, i); +//! adj[u].push_back({v, i}); +//! adj[v].push_back({u, i}); //! } //! auto [num_ccs, is_bridge, br_id] = bridges(adj, m); -//! vector>> adj1(n); -//! auto [num_ccs1, is_bridge1, br_id1] = bridges(adj1, -//! m); //! @endcode //! is_bridge[edge id] = 1 iff bridge edge //! br_id[v] = id, 0<=id> adj(n); +//! { +//! vector> adj(n); +//! auto [num_bccs, is_cut, bcc_id] = cuts(adj, m); +//! } +//! vector>> adj(n); //! rep (i, 0, m) { //! int u, v; //! cin >> u >> v; //! u--, v--; //! //self edges not allowed -//! adj[u].emplace_back(v, i); -//! adj[v].emplace_back(u, i); +//! adj[u].push_back({v, i}); +//! adj[v].push_back({u, i}); //! } //! auto [num_bccs, is_cut, bcc_id] = cuts(adj, m); -//! vector>> adj1(n); -//! auto [num_bccs1, is_cut1, bcc_id1] = cuts(adj1, m); //! @endcode //! is_cut[v] = 1 iff cut node //! bcc_id[edge id] = id, 0<=id adj(n); +//! { +//! vector adj(n); +//! vi cc_id = get_complement_graph_ccs(adj); +//! } +//! vector> adj; //! vi cc_id = get_complement_graph_ccs(adj); -//! vector> adj1; -//! vi cc_id2 = get_complement_graph_ccs(adj1); //! @endcode //! 0<=cc_id[v]>> adj(n); +//! { +//! vector>> adj(n); +//! auto d = dijkstra(adj, source); +//! } +//! vector>> adj(n); //! auto d = dijkstra(adj, source); -//! vector>> adj1(n); -//! auto d1 = dijkstra(adj1, source); //! @endcode //! d[v] = min dist from source->..->v //! @time O(n + (m log m)) diff --git a/library/graphs/hopcroft_karp.hpp b/library/graphs/hopcroft_karp.hpp index 8c7cdd68..aad23130 100644 --- a/library/graphs/hopcroft_karp.hpp +++ b/library/graphs/hopcroft_karp.hpp @@ -1,14 +1,17 @@ #pragma once //! https://github.com/foreverbell/acm-icpc-cheat-sheet/blob/master/src/graph-algorithm/hopcroft-karp.cpp //! @code -//! vector adj(lsz); +//! { +//! vector adj(lsz); +//! auto [matching_size, to_r, to_l, +//! mvc_l, mvc_r] = hopcroft_karp(adj, rsz); +//! } +//! vector> adj(lsz); //! adj[l].push_back(r); // add edge l <-> r +//! // 0<=l> adj1(lsz); -//! hopcroft_karp match(adj1, rsz); //! @endcode -//! 0<=l to_r[l] in matching if to_r[l]!=-1 //! to_l[r] <-> r in matching if to_l[r]!=-1 //! mvc_l[l] is 1 if l in Min Vertex Cover diff --git a/library/graphs/strongly_connected_components/scc.hpp b/library/graphs/strongly_connected_components/scc.hpp index d658eb5f..3e3a44b6 100644 --- a/library/graphs/strongly_connected_components/scc.hpp +++ b/library/graphs/strongly_connected_components/scc.hpp @@ -1,10 +1,12 @@ #pragma once //! https://github.com/kth-competitive-programming/kactl/blob/main/content/graph/SCC.h //! @code -//! vector adj(n); +//! { +//! vector adj(n); +//! auto [num_sccs, scc_id] = sccs(adj); +//! } +//! vector> adj(n); //! auto [num_sccs, scc_id] = sccs(adj); -//! vector> adj1(n); -//! auto [num_sccs1, scc_id1] = sccs(adj1); //! @endcode //! scc_id[v] = id, 0<=id v: scc_id[u] >= scc_id[v] diff --git a/library/trees/centroid_decomp.hpp b/library/trees/centroid_decomp.hpp index e531f85b..0d858a9c 100644 --- a/library/trees/centroid_decomp.hpp +++ b/library/trees/centroid_decomp.hpp @@ -1,12 +1,14 @@ #pragma once //! @code -//! vector adj(n); -//! centroid(adj, [&](const vector& adj, -//! int cent, int par_cent) { -//! }); -//! vector> adj1(n); -//! centroid(adj1, -//! [&](const vector>& adj1, +//! { +//! vector adj(n); +//! centroid(adj, [&](const vector& adj, +//! int cent, int par_cent) { +//! }); +//! } +//! vector> adj(n); +//! centroid(adj, +//! [&](const vector>& adj, //! int cent, int par_cent) {}); //! @endcode //! @time O(n log n) diff --git a/library/trees/edge_cd.hpp b/library/trees/edge_cd.hpp index 85f6dbc1..3447ecfc 100644 --- a/library/trees/edge_cd.hpp +++ b/library/trees/edge_cd.hpp @@ -3,18 +3,20 @@ //! https://codeforces.com/blog/entry/120446 //! https://youtu.be/wDwaMo5xa-k //! @code -//! vector adj(n); -//! edge_cd(adj, [&](const vector& adj, -//! int cent, int split) { +//! { +//! vector adj(n); +//! edge_cd(adj, [&]( +//! const vector& adj, +//! int cent, int split) {}); +//! } +//! vector> adj(n); +//! edge_cd(adj, [&](const vector>& +//! adj, int cent, int split) { //! // subtrees of prefix [0, split) of adj[cent] //! // are the first edge-set //! // subtrees of suffix [split, sz(adj[cent])) //! // of adj[cent] are the second edge-set //! }); -//! vector> adj1(n); -//! edge_cd(adj1, [&]( -//! const vector>& adj1, -//! int cent, int split) {}); //! @endcode //! handle single-edge-paths separately //! @time O(n log1.5 n) diff --git a/library/trees/ladder_decomposition/linear_kth_par.hpp b/library/trees/ladder_decomposition/linear_kth_par.hpp index b979ca26..20d1f14d 100644 --- a/library/trees/ladder_decomposition/linear_kth_par.hpp +++ b/library/trees/ladder_decomposition/linear_kth_par.hpp @@ -1,11 +1,13 @@ #pragma once //! https://codeforces.com/blog/entry/126580 //! @code -//! vector adj(n); +//! { +//! vector adj(n); +//! linear_kth_par kp(adj); +//! } +//! vector> adj(n); //! linear_kth_par kp(adj); //! int kth_par = kp.kth_par(v, k); -//! vector> adj1(n); -//! linear_kth_par kp1(adj1); //! @endcode //! kth_par = a node k edges up from v //! @time O(n + q) diff --git a/library/trees/lca_rmq/lca_rmq.hpp b/library/trees/lca_rmq/lca_rmq.hpp index 653a3c75..b6cd12ae 100644 --- a/library/trees/lca_rmq/lca_rmq.hpp +++ b/library/trees/lca_rmq/lca_rmq.hpp @@ -2,10 +2,12 @@ #include "../../data_structures/rmq.hpp" //! https://github.com/kth-competitive-programming/kactl/blob/main/content/graph/LCA.h //! @code -//! vector adj(n); +//! { +//! vector adj(n); +//! LCA lca(adj); +//! } +//! vector> adj(n); //! LCA lca(adj); -//! vector> adj1(n); -//! LCA lca1(adj1); //! @endcode //! @time O(nlogn + q) //! @space O(nlogn) diff --git a/library/trees/linear_lca.hpp b/library/trees/linear_lca.hpp index ce722cb8..d5789678 100644 --- a/library/trees/linear_lca.hpp +++ b/library/trees/linear_lca.hpp @@ -1,10 +1,12 @@ #pragma once //! https://codeforces.com/blog/entry/125371 //! @code -//! vector adj(n); -//! linear_lca llca(adj); -//! vector> adj1(n); -//! linear_lca llca1(adj1); +//! { +//! vector adj(n); +//! linear_lca llca(adj); +//! } +//! vector> adj(n); +//! linear_lca llca1(adj); //! @endcode //! @time O(n + q) //! @space O(n) diff --git a/library/trees/subtree_isomorphism.hpp b/library/trees/subtree_isomorphism.hpp index a81198a0..a908ef8c 100644 --- a/library/trees/subtree_isomorphism.hpp +++ b/library/trees/subtree_isomorphism.hpp @@ -1,10 +1,12 @@ #pragma once //! @code -//! vector adj(n); -//! auto [num_distinct_subtrees, iso_id] = -//! subtree_iso(adj); -//! vector> adj1(n); -//! subtree_iso iso(adj1); +//! { +//! vector adj(n); +//! auto [num_distinct_subtrees, iso_id] = +//! subtree_iso(adj); +//! } +//! vector> adj(n); +//! subtree_iso iso(adj); //! @endcode //! - 0 <= iso_id[v] < num_distinct_subtrees //! - iso_id[u] == iso_id[v] iff subtree u is diff --git a/library/trees/tree_lift/tree_lift.hpp b/library/trees/tree_lift/tree_lift.hpp index 7fe4efd1..6a0bb0a5 100644 --- a/library/trees/tree_lift/tree_lift.hpp +++ b/library/trees/tree_lift/tree_lift.hpp @@ -1,11 +1,13 @@ #pragma once //! https://github.com/ucf-programming-team/hackpack-cpp/blob/master/content/graphs/TreeLifting.h //! @code -//! vector adj(n); +//! { +//! vector adj(n); +//! tree_lift tree_l(adj); +//! } +//! vector> adj(n); //! tree_lift tree_l(adj); //! int kth_p = tree_l.kth_par(v, k); -//! vector> adj1(n); -//! tree_lift tree_l1(adj1); //! @endcode //! kth_p = a node k edges up from v //! @time O(n + q log n) From 298cba4f7e0e2e947256c93c8fe90ba9d5dd957c Mon Sep 17 00:00:00 2001 From: Luke Videckis Date: Sat, 14 Dec 2024 17:39:49 -0600 Subject: [PATCH 2/2] update --- tests/.config/.cppcheck_suppression_list | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/.config/.cppcheck_suppression_list b/tests/.config/.cppcheck_suppression_list index e20e98ca..285a9ef6 100644 --- a/tests/.config/.cppcheck_suppression_list +++ b/tests/.config/.cppcheck_suppression_list @@ -5,10 +5,10 @@ assertWithSideEffect unknownMacro unusedStructMember:../library/flow/min_cost_max_flow.hpp unusedStructMember:../library/strings/suffix_array/find/match.hpp:10 -unusedStructMember:../library/trees/tree_lift/tree_lift.hpp:15 -unusedStructMember:../library/trees/ladder_decomposition/linear_kth_par.hpp:15 +unusedStructMember:../library/trees/tree_lift/tree_lift.hpp:17 +unusedStructMember:../library/trees/ladder_decomposition/linear_kth_par.hpp:17 unusedStructMember:../library/data_structures/dsu/dsu_bipartite.hpp:9 -unusedStructMember:../library/trees/linear_lca.hpp:13 +unusedStructMember:../library/trees/linear_lca.hpp:15 unusedScopedObject:../library/trees/centroid_decomp_uncommon/count_paths_per_length.hpp:12 unusedScopedObject:library_checker_aizu_tests/cd_asserts.hpp:5 unusedScopedObject:../library/trees/centroid_decomp_uncommon/count_paths_per_node.hpp:14