Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions library/graphs/bridges_cuts/block_vertex_tree.hpp
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
#pragma once
#include "cuts.hpp"
//! @code
//! vector<vector<pii>> adj(n);
//! {
//! vector<vector<pii>> adj(n);
//! cuts cc(adj, m);
//! vector<vi> bvt = block_vertex_tree(adj, cc);
//! }
//! vector<basic_string<array<int, 2>>> adj(n);
//! cuts cc(adj, m);
//! vector<vi> bvt = block_vertex_tree(adj, cc);
//! vector<basic_string<array<int, 2>>> adj1(n);
//! cuts cc1(adj1, m);
//! vector<vi> bvt1 = block_vertex_tree(adj1, cc1);
//!
//! //to loop over each unique bcc containing a node u:
//! for (int bccid : bvt[v]) {
//! bccid -= n;
Expand Down
10 changes: 6 additions & 4 deletions library/graphs/bridges_cuts/bridge_tree.hpp
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
#pragma once
#include "bridges.hpp"
//! @code
//! vector<vector<pii>> adj(n);
//! {
//! vector<vector<pii>> adj(n);
//! bridges br(adj, m);
//! vector<vi> bt = bridge_tree(adj, br);
//! }
//! vector<basic_string<array<int, 2>>> adj(n);
//! bridges br(adj, m);
//! vector<vi> bt = bridge_tree(adj, br);
//! vector<basic_string<array<int, 2>>> adj1(n);
//! bridges br1(adj1, m);
//! vector<vi> bt1 = bridge_tree(adj1, br1);
//! @endcode
//! @time O(n + m)
//! @space O(n)
Expand Down
13 changes: 7 additions & 6 deletions library/graphs/bridges_cuts/bridges.hpp
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
#pragma once
//! https://cp-algorithms.com/graph/bridge-searching.html
//! @code
//! vector<vector<pii>> adj(n);
//! {
//! vector<vector<pii>> adj(n);
//! auto [num_ccs, is_bridge, br_id] = bridges(adj, m);
//! }
//! vector<basic_string<array<int, 2>>> 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<basic_string<array<int,2>>> 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<num_ccs
Expand Down
12 changes: 7 additions & 5 deletions library/graphs/bridges_cuts/cuts.hpp
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
#pragma once
//! https://cp-algorithms.com/graph/cutpoints.html
//! @code
//! vector<vector<pii>> adj(n);
//! {
//! vector<vector<pii>> adj(n);
//! auto [num_bccs, is_cut, bcc_id] = cuts(adj, m);
//! }
//! vector<basic_string<array<int, 2>>> 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<basic_string<array<int,2>>> 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<num_bccs
Expand Down
8 changes: 5 additions & 3 deletions library/graphs/complement_graph_ccs.hpp
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
#pragma once
//! @code
//! vector<vi> adj(n);
//! {
//! vector<vi> adj(n);
//! vi cc_id = get_complement_graph_ccs(adj);
//! }
//! vector<basic_string<int>> adj;
//! vi cc_id = get_complement_graph_ccs(adj);
//! vector<basic_string<int>> adj1;
//! vi cc_id2 = get_complement_graph_ccs(adj1);
//! @endcode
//! 0<=cc_id[v]<number of connected components
//! in the complement graph
Expand Down
8 changes: 5 additions & 3 deletions library/graphs/dijkstra.hpp
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
#pragma once
//! @code
//! vector<vector<pair<int, ll>>> adj(n);
//! {
//! vector<vector<pair<int, ll>>> adj(n);
//! auto d = dijkstra(adj, source);
//! }
//! vector<basic_string<array<int, 2>>> adj(n);
//! auto d = dijkstra(adj, source);
//! vector<basic_string<array<int, 2>>> adj1(n);
//! auto d1 = dijkstra(adj1, source);
//! @endcode
//! d[v] = min dist from source->..->v
//! @time O(n + (m log m))
Expand Down
11 changes: 7 additions & 4 deletions library/graphs/hopcroft_karp.hpp
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
#pragma once
//! https://github.com/foreverbell/acm-icpc-cheat-sheet/blob/master/src/graph-algorithm/hopcroft-karp.cpp
//! @code
//! vector<vi> adj(lsz);
//! {
//! vector<vi> adj(lsz);
//! auto [matching_size, to_r, to_l,
//! mvc_l, mvc_r] = hopcroft_karp(adj, rsz);
//! }
//! vector<basic_string<int>> adj(lsz);
//! adj[l].push_back(r); // add edge l <-> r
//! // 0<=l<lsz; 0<=r<rsz
//! auto [matching_size, to_r, to_l,
//! mvc_l, mvc_r] = hopcroft_karp(adj, rsz);
//! vector<basic_string<int>> adj1(lsz);
//! hopcroft_karp match(adj1, rsz);
//! @endcode
//! 0<=l<lsz; 0<=r<rsz
//! 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
Expand Down
8 changes: 5 additions & 3 deletions library/graphs/strongly_connected_components/scc.hpp
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
#pragma once
//! https://github.com/kth-competitive-programming/kactl/blob/main/content/graph/SCC.h
//! @code
//! vector<vi> adj(n);
//! {
//! vector<vi> adj(n);
//! auto [num_sccs, scc_id] = sccs(adj);
//! }
//! vector<basic_string<int>> adj(n);
//! auto [num_sccs, scc_id] = sccs(adj);
//! vector<basic_string<int>> adj1(n);
//! auto [num_sccs1, scc_id1] = sccs(adj1);
//! @endcode
//! scc_id[v] = id, 0<=id<num_sccs
//! for each edge u -> v: scc_id[u] >= scc_id[v]
Expand Down
16 changes: 9 additions & 7 deletions library/trees/centroid_decomp.hpp
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
#pragma once
//! @code
//! vector<vi> adj(n);
//! centroid(adj, [&](const vector<vi>& adj,
//! int cent, int par_cent) {
//! });
//! vector<basic_string<int>> adj1(n);
//! centroid(adj1,
//! [&](const vector<basic_string<int>>& adj1,
//! {
//! vector<vi> adj(n);
//! centroid(adj, [&](const vector<vi>& adj,
//! int cent, int par_cent) {
//! });
//! }
//! vector<basic_string<int>> adj(n);
//! centroid(adj,
//! [&](const vector<basic_string<int>>& adj,
//! int cent, int par_cent) {});
//! @endcode
//! @time O(n log n)
Expand Down
16 changes: 9 additions & 7 deletions library/trees/edge_cd.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,20 @@
//! https://codeforces.com/blog/entry/120446
//! https://youtu.be/wDwaMo5xa-k
//! @code
//! vector<vi> adj(n);
//! edge_cd(adj, [&](const vector<vi>& adj,
//! int cent, int split) {
//! {
//! vector<vi> adj(n);
//! edge_cd(adj, [&](
//! const vector<vi>& adj,
//! int cent, int split) {});
//! }
//! vector<basic_string<int>> adj(n);
//! edge_cd(adj, [&](const vector<basic_string<int>>&
//! 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<basic_string<int>> adj1(n);
//! edge_cd(adj1, [&](
//! const vector<basic_string<int>>& adj1,
//! int cent, int split) {});
//! @endcode
//! handle single-edge-paths separately
//! @time O(n log1.5 n)
Expand Down
8 changes: 5 additions & 3 deletions library/trees/ladder_decomposition/linear_kth_par.hpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
#pragma once
//! https://codeforces.com/blog/entry/126580
//! @code
//! vector<vi> adj(n);
//! {
//! vector<vi> adj(n);
//! linear_kth_par kp(adj);
//! }
//! vector<basic_string<int>> adj(n);
//! linear_kth_par kp(adj);
//! int kth_par = kp.kth_par(v, k);
//! vector<basic_string<int>> adj1(n);
//! linear_kth_par kp1(adj1);
//! @endcode
//! kth_par = a node k edges up from v
//! @time O(n + q)
Expand Down
8 changes: 5 additions & 3 deletions library/trees/lca_rmq/lca_rmq.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@
#include "../../data_structures/rmq.hpp"
//! https://github.com/kth-competitive-programming/kactl/blob/main/content/graph/LCA.h
//! @code
//! vector<vi> adj(n);
//! {
//! vector<vi> adj(n);
//! LCA lca(adj);
//! }
//! vector<basic_string<int>> adj(n);
//! LCA lca(adj);
//! vector<basic_string<int>> adj1(n);
//! LCA lca1(adj1);
//! @endcode
//! @time O(nlogn + q)
//! @space O(nlogn)
Expand Down
10 changes: 6 additions & 4 deletions library/trees/linear_lca.hpp
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
#pragma once
//! https://codeforces.com/blog/entry/125371
//! @code
//! vector<vi> adj(n);
//! linear_lca llca(adj);
//! vector<basic_string<int>> adj1(n);
//! linear_lca llca1(adj1);
//! {
//! vector<vi> adj(n);
//! linear_lca llca(adj);
//! }
//! vector<basic_string<int>> adj(n);
//! linear_lca llca1(adj);
//! @endcode
//! @time O(n + q)
//! @space O(n)
Expand Down
12 changes: 7 additions & 5 deletions library/trees/subtree_isomorphism.hpp
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
#pragma once
//! @code
//! vector<vi> adj(n);
//! auto [num_distinct_subtrees, iso_id] =
//! subtree_iso(adj);
//! vector<basic_string<int>> adj1(n);
//! subtree_iso iso(adj1);
//! {
//! vector<vi> adj(n);
//! auto [num_distinct_subtrees, iso_id] =
//! subtree_iso(adj);
//! }
//! vector<basic_string<int>> adj(n);
//! subtree_iso iso(adj);
//! @endcode
//! - 0 <= iso_id[v] < num_distinct_subtrees
//! - iso_id[u] == iso_id[v] iff subtree u is
Expand Down
8 changes: 5 additions & 3 deletions library/trees/tree_lift/tree_lift.hpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
#pragma once
//! https://github.com/ucf-programming-team/hackpack-cpp/blob/master/content/graphs/TreeLifting.h
//! @code
//! vector<vi> adj(n);
//! {
//! vector<vi> adj(n);
//! tree_lift tree_l(adj);
//! }
//! vector<basic_string<int>> adj(n);
//! tree_lift tree_l(adj);
//! int kth_p = tree_l.kth_par(v, k);
//! vector<basic_string<int>> adj1(n);
//! tree_lift tree_l1(adj1);
//! @endcode
//! kth_p = a node k edges up from v
//! @time O(n + q log n)
Expand Down
6 changes: 3 additions & 3 deletions tests/.config/.cppcheck_suppression_list
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading