Skip to content

Commit 8979e9a

Browse files
committed
rename adj to g
1 parent 42dd38a commit 8979e9a

26 files changed

+178
-179
lines changed

library/dsu/kruskal_tree.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
struct kr_tree {
66
int id;
77
vi p;
8-
vector<vi> adj;
9-
kr_tree(int n): id(n), p(2 * n, -1), adj(2 * n) {}
8+
vector<vi> g;
9+
kr_tree(int n): id(n), p(2 * n, -1), g(2 * n) {}
1010
int f(int u) { return p[u] < 0 ? u : p[u] = f(p[u]); }
1111
bool join(int u, int v) {
1212
if ((u = f(u)) == (v = f(v))) return 0;
13-
return adj[p[u] = p[v] = id++] = {u, v}, 1;
13+
return g[p[u] = p[v] = id++] = {u, v}, 1;
1414
}
1515
};

library/flow/min_cost_max_flow.hpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ struct mcmf {
1717
};
1818
int n;
1919
vector<edge> e;
20-
vector<vi> adj;
21-
mcmf(int n): n(n), adj(n) {}
20+
vector<vi> g;
21+
mcmf(int n): n(n), g(n) {}
2222
void add_edge(int u, int v, ll cap, ll cost) {
23-
edge e1 = {u, v, cap, cost, 0, sz(adj[v])};
24-
edge e2 = {v, u, 0, -cost, 0, sz(adj[u])};
25-
adj[u].push_back(sz(e));
23+
edge e1 = {u, v, cap, cost, 0, sz(g[v])};
24+
edge e2 = {v, u, 0, -cost, 0, sz(g[u])};
25+
g[u].push_back(sz(e));
2626
e.push_back(e1);
27-
adj[v].push_back(sz(e));
27+
g[v].push_back(sz(e));
2828
e.push_back(e2);
2929
}
3030
array<ll, 2> get_flow(int s, int t, ll total_flow) {
@@ -39,8 +39,8 @@ struct mcmf {
3939
int u = q[qh++];
4040
id[u] = 2;
4141
if (qh == n) qh = 0;
42-
rep(i, 0, sz(adj[u])) {
43-
edge& r = e[adj[u][i]];
42+
rep(i, 0, sz(g[u])) {
43+
edge& r = e[g[u][i]];
4444
if (r.flow < r.cap && d[u] + r.cost < d[r.v]) {
4545
d[r.v] = d[u] + r.cost;
4646
if (id[r.v] == 0) {
@@ -61,14 +61,14 @@ struct mcmf {
6161
for (int u = t; u != s; u = p[u]) {
6262
int pv = p[u], pr = p_edge[u];
6363
addflow = min(addflow,
64-
e[adj[pv][pr]].cap - e[adj[pv][pr]].flow);
64+
e[g[pv][pr]].cap - e[g[pv][pr]].flow);
6565
}
6666
for (int u = t; u != s; u = p[u]) {
6767
int pv = p[u], pr = p_edge[u],
68-
r = e[adj[pv][pr]].back;
69-
e[adj[pv][pr]].flow += addflow;
70-
e[adj[u][r]].flow -= addflow;
71-
cost += e[adj[pv][pr]].cost * addflow;
68+
r = e[g[pv][pr]].back;
69+
e[g[pv][pr]].flow += addflow;
70+
e[g[u][r]].flow -= addflow;
71+
cost += e[g[pv][pr]].cost * addflow;
7272
}
7373
flow += addflow;
7474
}

library/graphs/bcc_callback.hpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
//! https://cp-algorithms.com/graph/cutpoints.html
33
//! @code
44
//! {
5-
//! vector<vi> adj(n);
5+
//! vector<vi> g(n);
66
//! DSU dsu(n);
77
//! vector<bool> seen(n);
8-
//! bcc(adj, [&](const vi& nodes) {
8+
//! bcc(g, [&](const vi& nodes) {
99
//! int count_edges = 0;
1010
//! rep (i, 0, sz(nodes) - 1) {
1111
//! seen[nodes[i]] = 1;
12-
//! for (int u : adj[nodes[i]]) if (!seen[u]) {
12+
//! for (int u : g[nodes[i]]) if (!seen[u]) {
1313
//! // edge nodes[i] <=> u is in current BCC
1414
//! count_edges++;
1515
//! }
@@ -22,15 +22,15 @@
2222
//! });
2323
//! vector<basic_string<int>> bridge_tree(n);
2424
//! rep (i, 0, n)
25-
//! for (int u : adj[i])
25+
//! for (int u : g[i])
2626
//! if (dsu.f(i) != dsu.f(u))
2727
//! bridge_tree[dsu.f(i)] += dsu.f(u);
2828
//! }
2929
//!
30-
//! vector<basic_string<int>> adj(n);
30+
//! vector<basic_string<int>> g(n);
3131
//! vector<basic_string<int>> block_vertex_tree(2 * n);
3232
//! int bcc_id = n;
33-
//! bcc(adj, [&](const vi& nodes) {
33+
//! bcc(g, [&](const vi& nodes) {
3434
//! for (int u : nodes) {
3535
//! block_vertex_tree[u] += bcc_id;
3636
//! block_vertex_tree[bcc_id] += u;
@@ -41,12 +41,12 @@
4141
//! callback not called on components with a single node
4242
//! @time O(n + m)
4343
//! @space O(n)
44-
void bcc(const auto& adj, auto f) {
45-
int n = sz(adj), q = 0, s = 0;
44+
void bcc(const auto& g, auto f) {
45+
int n = sz(g), q = 0, s = 0;
4646
vi t(n), st(n);
4747
auto dfs = [&](auto&& dfs, int u) -> int {
4848
int l = t[u] = ++q;
49-
for (int v : adj[u]) {
49+
for (int v : g[u]) {
5050
int siz = s, lu = 0;
5151
l = min(l, t[v] ?: (lu = dfs(dfs, st[s++] = v)));
5252
if (lu >= t[u]) {

library/graphs/dijkstra.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
#pragma once
22
//! @code
3-
//! vector<basic_string<array<int, 2>>> adj(n);
4-
//! auto d = dijkstra(adj, source);
3+
//! vector<basic_string<array<int, 2>>> g(n);
4+
//! auto d = dijkstra(g, source);
55
//! @endcode
66
//! d[v] = min dist from source->..->v
77
//! @time O(n + (m log m))
88
//! @space O(n + m)
9-
vector<ll> dijkstra(const auto& adj, int s) {
9+
vector<ll> dijkstra(const auto& g, int s) {
1010
using p = pair<ll, int>;
1111
priority_queue<p, vector<p>, greater<>> pq;
1212
pq.emplace(0, s);
13-
vector<ll> d(sz(adj), LLONG_MAX);
13+
vector<ll> d(sz(g), LLONG_MAX);
1414
while (!empty(pq)) {
1515
auto [d_v, v] = pq.top();
1616
pq.pop();
1717
if (d[v] != LLONG_MAX) continue;
1818
d[v] = d_v;
19-
for (auto [u, w] : adj[v]) pq.emplace(w + d_v, u);
19+
for (auto [u, w] : g[v]) pq.emplace(w + d_v, u);
2020
}
2121
return d;
2222
}

library/graphs/euler_path.hpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
#pragma once
22
//! @code
3-
//! vector<basic_string<array<int, 2>>> adj(n);
3+
//! vector<basic_string<array<int, 2>>> g(n);
44
//! vector<pii> edges(m);
55
//! rep(i, 0, m) {
66
//! int u, v;
77
//! cin >> u >> v;
88
//! u--, v--;
9-
//! adj[u] += {v, i};
9+
//! g[u] += {v, i};
1010
//! edges[i] = {u, v};
1111
//! }
12-
//! vector<pii> path = euler_path(adj, m, source);
12+
//! vector<pii> path = euler_path(g, m, source);
1313
//! @endcode
1414
//! @time O(n + m)
1515
//! @space O(n + m)
16-
vector<pii> euler_path(auto& adj, int m, int s) {
16+
vector<pii> euler_path(auto& g, int m, int s) {
1717
vi vis(m);
1818
vector<pii> path;
1919
auto dfs = [&](auto&& dfs, int u, int eu) -> void {
20-
while (!empty(adj[u])) {
21-
auto [v, ev] = adj[u].back();
22-
adj[u].pop_back();
20+
while (!empty(g[u])) {
21+
auto [v, ev] = g[u].back();
22+
g[u].pop_back();
2323
if (!vis[ev]) vis[ev] = 1, dfs(dfs, v, ev);
2424
}
2525
path.emplace_back(u, eu);

library/graphs/hopcroft_karp.hpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
#pragma once
22
//! https://github.com/foreverbell/acm-icpc-cheat-sheet/blob/master/src/graph-algorithm/hopcroft-karp.cpp
33
//! @code
4-
//! vector<basic_string<int>> adj(lsz);
5-
//! adj[l] += r; // add edge l <-> r
4+
//! vector<basic_string<int>> g(lsz);
5+
//! g[l] += r; // add edge l <-> r
66
//! // 0<=l<lsz; 0<=r<rsz
77
//! auto [matching_size, to_r, to_l,
8-
//! mvc_l, mvc_r] = hopcroft_karp(adj, rsz);
8+
//! mvc_l, mvc_r] = hopcroft_karp(g, rsz);
99
//! @endcode
1010
//! l <-> to_r[l] in matching if to_r[l]!=-1
1111
//! to_l[r] <-> r in matching if to_l[r]!=-1
@@ -17,9 +17,9 @@ struct hopcroft_karp {
1717
int m_sz = 0;
1818
vi to_r, to_l;
1919
vector<bool> mvc_l, mvc_r;
20-
hopcroft_karp(const auto& adj, int rsz):
21-
to_r(sz(adj), -1), to_l(rsz, -1) {
22-
int lsz = sz(adj);
20+
hopcroft_karp(const auto& g, int rsz):
21+
to_r(sz(g), -1), to_l(rsz, -1) {
22+
int lsz = sz(g);
2323
while (1) {
2424
queue<int> q;
2525
vi level(lsz, -1);
@@ -32,7 +32,7 @@ struct hopcroft_karp {
3232
int u = q.front();
3333
q.pop();
3434
mvc_l[u] = 0;
35-
for (int v : adj[u]) {
35+
for (int v : g[u]) {
3636
mvc_r[v] = 1;
3737
int w = to_l[v];
3838
if (w == -1) found = 1;
@@ -44,7 +44,7 @@ struct hopcroft_karp {
4444
}
4545
if (!found) break;
4646
auto dfs = [&](auto&& dfs, int u) -> bool {
47-
for (int v : adj[u]) {
47+
for (int v : g[u]) {
4848
int w = to_l[v];
4949
if (w == -1 ||
5050
(level[u] + 1 == level[w] && dfs(dfs, w))) {

library/graphs/scc.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
#pragma once
22
//! https://github.com/kth-competitive-programming/kactl/blob/main/content/graph/SCC.h
33
//! @code
4-
//! vector<basic_string<int>> adj(n);
5-
//! auto [num_sccs, scc_id] = scc(adj);
4+
//! vector<basic_string<int>> g(n);
5+
//! auto [num_sccs, scc_id] = scc(g);
66
//! @endcode
77
//! scc_id[u] = id, 0<=id<num_sccs
88
//! for each edge u -> v: scc_id[u] >= scc_id[v]
99
//! @time O(n + m)
1010
//! @space O(n)
11-
auto scc(const auto& adj) {
12-
int n = sz(adj), num_sccs = 0, q = 0, s = 0;
11+
auto scc(const auto& g) {
12+
int n = sz(g), num_sccs = 0, q = 0, s = 0;
1313
vi scc_id(n, -1), tin(n), st(n);
1414
auto dfs = [&](auto&& dfs, int u) -> int {
1515
int low = tin[u] = ++q;
1616
st[s++] = u;
17-
for (int v : adj[u])
17+
for (int v : g[u])
1818
if (scc_id[v] < 0)
1919
low = min(low, tin[v] ?: dfs(dfs, v));
2020
if (tin[u] == low) {

library/graphs/strongly_connected_components/add_edges_strongly_connected.hpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,30 @@
88
//! SCCs)
99
//!
1010
//! @code
11-
//! auto [num_sccs, scc_id] = scc(adj);
12-
//! vector<pii> edges = extra_edges(adj,
11+
//! auto [num_sccs, scc_id] = scc(g);
12+
//! vector<pii> edges = extra_edges(g,
1313
//! num_sccs, scc_id);
1414
//! @endcode
15-
//! @param adj,num_sccs,scc_id directed graph and its SCCs
15+
//! @param g,num_sccs,scc_id directed graph and its SCCs
1616
//! @returns directed edge list: edges[i][0] -> edges[i][1]
1717
//! @time O(n + m)
1818
//! @space An O(n) edge list is allocated and returned, but
1919
//! multiple O(n + m) vectors are allocated temporarily
20-
vector<pii> extra_edges(const auto& adj, int num_sccs,
20+
vector<pii> extra_edges(const auto& g, int num_sccs,
2121
const vi& scc_id) {
2222
if (num_sccs == 1) return {};
23-
int n = sz(adj);
24-
vector<vi> scc_adj(num_sccs);
23+
int n = sz(g);
24+
vector<vi> scc_g(num_sccs);
2525
vector<bool> zero_in(num_sccs, 1);
26-
rep(i, 0, n) for (int v : adj[i]) {
26+
rep(i, 0, n) for (int v : g[i]) {
2727
if (scc_id[i] == scc_id[v]) continue;
28-
scc_adj[scc_id[i]].push_back(scc_id[v]);
28+
scc_g[scc_id[i]].push_back(scc_id[v]);
2929
zero_in[scc_id[v]] = 0;
3030
}
3131
vector<bool> vis(num_sccs);
3232
auto dfs = [&](auto&& dfs, int u) {
33-
if (empty(scc_adj[u])) return u;
34-
for (int v : scc_adj[u])
33+
if (empty(scc_g[u])) return u;
34+
for (int v : scc_g[u])
3535
if (!vis[v]) {
3636
vis[v] = 1;
3737
int zero_out = dfs(dfs, v);
@@ -49,7 +49,7 @@ vector<pii> extra_edges(const auto& adj, int num_sccs,
4949
}
5050
rep(i, 1, sz(edges))
5151
swap(edges[i].first, edges[i - 1].first);
52-
rep(i, 0, num_sccs) if (empty(scc_adj[i]) && !vis[i]) {
52+
rep(i, 0, num_sccs) if (empty(scc_g[i]) && !vis[i]) {
5353
if (!empty(in_unused)) {
5454
edges.emplace_back(i, in_unused.back());
5555
in_unused.pop_back();

library/graphs/strongly_connected_components/offline_incremental_scc.hpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,24 @@ vi offline_incremental_scc(vector<array<int, 2>> eds,
1515
int m = sz(eds);
1616
vi ids(n, -1), joins(m, m), idx(m), vs(n), scc_id;
1717
iota(all(idx), 0);
18-
vector<vi> adj;
18+
vector<vi> g;
1919
auto dnc = [&](auto&& dnc, auto el, auto er, int tl,
2020
int tr) {
21-
adj.clear();
21+
g.clear();
2222
int mid = midpoint(tl, tr);
2323
for (auto it = el; it != er; it++) {
2424
auto& [u, v] = eds[*it];
2525
for (int w : {u, v}) {
2626
if (ids[w] != -1) continue;
27-
ids[w] = sz(adj);
28-
vs[sz(adj)] = w;
29-
adj.emplace_back();
27+
ids[w] = sz(g);
28+
vs[sz(g)] = w;
29+
g.emplace_back();
3030
}
3131
u = ids[u], v = ids[v];
32-
if (*it <= mid) adj[u].push_back(v);
32+
if (*it <= mid) g[u].push_back(v);
3333
}
34-
rep(i, 0, sz(adj)) ids[vs[i]] = -1;
35-
scc_id = scc(adj).second;
34+
rep(i, 0, sz(g)) ids[vs[i]] = -1;
35+
scc_id = scc(g).second;
3636
auto split = partition(el, er, [&](int i) {
3737
return scc_id[eds[i][0]] == scc_id[eds[i][1]];
3838
});

library/graphs/uncommon/block_vertex_tree.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
#pragma once
22
#include "cuts.hpp"
33
//! @code
4-
//! vector<basic_string<array<int, 2>>> adj(n);
5-
//! auto [num_bccs, bcc_id, is_cut] = cuts(adj, m);
6-
//! auto bvt = block_vertex_tree(adj, num_bccs, bcc_id);
4+
//! vector<basic_string<array<int, 2>>> g(n);
5+
//! auto [num_bccs, bcc_id, is_cut] = cuts(g, m);
6+
//! auto bvt = block_vertex_tree(g, num_bccs, bcc_id);
77
//!
88
//! //to loop over each unique bcc containing a node u:
99
//! for (int bccid : bvt[v]) {
@@ -16,13 +16,13 @@
1616
//! [n, n + num_bccs) are BCC nodes
1717
//! @time O(n + m)
1818
//! @time O(n)
19-
auto block_vertex_tree(const auto& adj, int num_bccs,
19+
auto block_vertex_tree(const auto& g, int num_bccs,
2020
const vi& bcc_id) {
21-
int n = sz(adj);
21+
int n = sz(g);
2222
vector<vi> bvt(n + num_bccs);
2323
vector<bool> vis(num_bccs);
2424
rep(i, 0, n) {
25-
for (auto [_, e_id] : adj[i]) {
25+
for (auto [_, e_id] : g[i]) {
2626
int bccid = bcc_id[e_id];
2727
if (!vis[bccid]) {
2828
vis[bccid] = 1;

0 commit comments

Comments
 (0)