We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent d181cb4 commit 42dd38aCopy full SHA for 42dd38a
19 files changed
library/convolution/min_plus_convolution_convex_and_arbitrary.hpp
@@ -9,7 +9,7 @@ vi min_plus(const vi& convex, const vi& arbitrary) {
9
int n = sz(convex);
10
int m = sz(arbitrary);
11
vi res(n + m - 1, INT_MAX);
12
- auto dnc = [&](auto&& self, int res_le, int res_ri,
+ auto dnc = [&](auto&& dnc, int res_le, int res_ri,
13
int arb_le, int arb_ri) -> void {
14
if (res_le >= res_ri) return;
15
int mid_res = (res_le + res_ri) / 2;
@@ -22,9 +22,9 @@ vi min_plus(const vi& convex, const vi& arbitrary) {
22
op_arb = i;
23
}
24
25
- self(self, res_le, mid_res, arb_le,
+ dnc(dnc, res_le, mid_res, arb_le,
26
min(arb_ri, op_arb + 1));
27
- self(self, mid_res + 1, res_ri, op_arb, arb_ri);
+ dnc(dnc, mid_res + 1, res_ri, op_arb, arb_ri);
28
};
29
dnc(dnc, 0, n + m - 1, 0, m);
30
return res;
library/graphs/bcc_callback.hpp
@@ -44,11 +44,11 @@
44
void bcc(const auto& adj, auto f) {
45
int n = sz(adj), q = 0, s = 0;
46
vi t(n), st(n);
47
- auto dfs = [&](auto&& self, int u) -> int {
+ auto dfs = [&](auto&& dfs, int u) -> int {
48
int l = t[u] = ++q;
49
for (int v : adj[u]) {
50
int siz = s, lu = 0;
51
- l = min(l, t[v] ?: (lu = self(self, st[s++] = v)));
+ l = min(l, t[v] ?: (lu = dfs(dfs, st[s++] = v)));
52
if (lu >= t[u]) {
53
st[s++] = u;
54
f({siz + all(st) - n + s});
library/graphs/euler_path.hpp
@@ -16,11 +16,11 @@
16
vector<pii> euler_path(auto& adj, int m, int s) {
17
vi vis(m);
18
vector<pii> path;
19
- auto dfs = [&](auto&& self, int u, int eu) -> void {
+ auto dfs = [&](auto&& dfs, int u, int eu) -> void {
20
while (!empty(adj[u])) {
21
auto [v, ev] = adj[u].back();
adj[u].pop_back();
- if (!vis[ev]) vis[ev] = 1, self(self, v, ev);
+ if (!vis[ev]) vis[ev] = 1, dfs(dfs, v, ev);
path.emplace_back(u, eu);
library/graphs/hopcroft_karp.hpp
@@ -43,11 +43,11 @@ struct hopcroft_karp {
43
if (!found) break;
- auto dfs = [&](auto&& self, int u) -> bool {
+ auto dfs = [&](auto&& dfs, int u) -> bool {
int w = to_l[v];
if (w == -1 ||
- (level[u] + 1 == level[w] && self(self, w))) {
+ (level[u] + 1 == level[w] && dfs(dfs, w))) {
to_r[u] = v;
to_l[v] = u;
return 1;
library/graphs/scc.hpp
@@ -11,12 +11,12 @@
auto scc(const auto& adj) {
int n = sz(adj), num_sccs = 0, q = 0, s = 0;
vi scc_id(n, -1), tin(n), st(n);
int low = tin[u] = ++q;
for (int v : adj[u])
if (scc_id[v] < 0)
- low = min(low, tin[v] ?: self(self, v));
+ low = min(low, tin[v] ?: dfs(dfs, v));
if (tin[u] == low) {
while (scc_id[u] < 0) scc_id[st[--s]] = num_sccs;
num_sccs++;
library/graphs/strongly_connected_components/add_edges_strongly_connected.hpp
@@ -29,12 +29,12 @@ vector<pii> extra_edges(const auto& adj, int num_sccs,
zero_in[scc_id[v]] = 0;
31
vector<bool> vis(num_sccs);
32
- auto dfs = [&](auto&& self, int u) {
+ auto dfs = [&](auto&& dfs, int u) {
33
if (empty(scc_adj[u])) return u;
34
for (int v : scc_adj[u])
35
if (!vis[v]) {
36
vis[v] = 1;
37
- int zero_out = self(self, v);
+ int zero_out = dfs(dfs, v);
38
if (zero_out != -1) return zero_out;
39
40
return -1;
library/graphs/strongly_connected_components/offline_incremental_scc.hpp
@@ -16,8 +16,8 @@ vi offline_incremental_scc(vector<array<int, 2>> eds,
vi ids(n, -1), joins(m, m), idx(m), vs(n), scc_id;
iota(all(idx), 0);
vector<vi> adj;
- auto divide_and_conquer = [&](auto&& self, auto el,
- auto er, int tl, int tr) {
+ auto dnc = [&](auto&& dnc, auto el, auto er, int tl,
+ int tr) {
adj.clear();
int mid = midpoint(tl, tr);
for (auto it = el; it != er; it++) {
@@ -42,11 +42,11 @@ vi offline_incremental_scc(vector<array<int, 2>> eds,
42
auto& [u, v] = eds[*it];
u = scc_id[u], v = scc_id[v];
- self(self, el, split, tl, mid);
- self(self, split, er, mid, tr);
+ dnc(dnc, el, split, tl, mid);
+ dnc(dnc, split, er, mid, tr);
// uses -1 as the lower bound to correctly handle
// self-edges
- divide_and_conquer(divide_and_conquer, all(idx), -1, m);
+ dnc(dnc, all(idx), -1, m);
return joins;
library/graphs/uncommon/bridges.hpp
@@ -18,12 +18,12 @@
auto bridges(const auto& adj, int m) {
int n = sz(adj), num_ccs = 0, q = 0, s = 0;
vi br_id(n, -1), is_br(m), tin(n), st(n);
- auto dfs = [&](auto&& self, int u, int p) -> int {
+ auto dfs = [&](auto&& dfs, int u, int p) -> int {
for (auto [v, e] : adj[u])
if (e != p && br_id[v] < 0)
- low = min(low, tin[v] ?: self(self, v, e));
+ low = min(low, tin[v] ?: dfs(dfs, v, e));
if (p != -1) is_br[p] = 1;
while (br_id[u] < 0) br_id[st[--s]] = num_ccs;
library/graphs/uncommon/cuts.hpp
@@ -19,14 +19,14 @@
auto cuts(const auto& adj, int m) {
int n = sz(adj), num_bccs = 0, q = 0, s = 0;
vi bcc_id(m, -1), is_cut(n), tin(n), st(m);
for (auto [v, e] : adj[u]) {
assert(u != v);
if (e == p) continue;
if (tin[v] < tin[u]) st[s++] = e;
int lu = -1;
- low = min(low, tin[v] ?: (lu = self(self, v, e)));
+ low = min(low, tin[v] ?: (lu = dfs(dfs, v, e)));
if (lu >= tin[u]) {
is_cut[u] = p >= 0 || tin[u] + 1 < tin[v];
while (bcc_id[e] < 0) bcc_id[st[--s]] = num_bccs;
library/trees/centroid_decomp.hpp
@@ -7,13 +7,13 @@
7
//! @space O(n)
8
void centroid(auto& adj, auto f) {
vi siz(sz(adj));
- auto calc_sz = [&](auto&& self, int u, int p) -> void {
+ auto dfs_sz = [&](auto&& dfs_sz, int u, int p) -> void {
siz[u] = 1;
- if (v != p) self(self, v, u), siz[u] += siz[v];
+ if (v != p) dfs_sz(dfs_sz, v, u), siz[u] += siz[v];
- auto dfs = [&](auto&& self, int u, int p) -> void {
- calc_sz(calc_sz, u, -1);
+ auto dfs = [&](auto&& dfs, int u, int p) -> void {
+ dfs_sz(dfs_sz, u, -1);
for (int w = -1, sz_root = siz[u];;) {
auto big_ch = ranges::find_if(adj[u], [&](int v) {
return v != w && 2 * siz[v] > sz_root;
@@ -25,7 +25,7 @@ void centroid(auto& adj, auto f) {
iter_swap(ranges::find(adj[v], u), rbegin(adj[v]));
adj[v].pop_back();
- self(self, v, u);
+ dfs(dfs, v, u);
dfs(dfs, 0, -1);
0 commit comments