Skip to content

Commit de0d02e

Browse files
committed
golf and format
1 parent 3137a06 commit de0d02e

File tree

1 file changed

+13
-35
lines changed

1 file changed

+13
-35
lines changed

library/graphs/bridges_cuts/cuts_callback.hpp

Lines changed: 13 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -14,48 +14,26 @@
1414
//! adj[u] += {v, i};
1515
//! adj[v] += {u, i};
1616
//! }
17-
//! auto [num_bccs, bcc_id, is_cut] = cuts(adj, m);
17+
//! cuts_callback(adj, [&](int v, const vi& nodes_bcc) {
18+
//! });
1819
//! @endcode
1920
//! @time O(n + m)
2021
//! @space O(n + m)
21-
/*
22-
auto cuts(const auto& adj, int m) {
23-
int n = sz(adj), num_bccs = 0, q = 0, s = 0;
24-
vi bcc_id(m, -1), is_cut(n), tin(n), st(m);
25-
auto dfs = [&](auto&& self, int v, int p) -> int {
26-
int low = tin[v] = ++q;
27-
for (auto [u, e] : adj[v]) {
28-
assert(v != u);
29-
if (e == p) continue;
30-
if (tin[u] < tin[v]) st[s++] = e;
31-
int lu = -1;
32-
low = min(low, tin[u] ?: (lu = self(self, u, e)));
33-
if (lu >= tin[v]) {
34-
is_cut[v] = p >= 0 || tin[v] + 1 < tin[u];
35-
while (bcc_id[e] < 0) bcc_id[st[--s]] = num_bccs;
36-
num_bccs++;
37-
}
38-
}
39-
return low;
40-
};
41-
rep(i, 0, n) if (!tin[i]) dfs(dfs, i, -1);
42-
return tuple{num_bccs, bcc_id, is_cut};
43-
}
44-
*/
4522
void cuts_callback(const auto& adj, auto f) {
46-
int n = ssize(adj), q = 0, s = 0;
47-
vector<int> tin(n), st(n);
23+
int n = sz(adj), q = 0, s = 0;
24+
vi tin(n), st(n);
4825
auto dfs = [&](auto&& self, int v, int p) -> int {
4926
int low = tin[v] = ++q;
50-
for (int u : adj[v]) if (u != p) {
51-
int siz = s, lu = 0;
52-
low = min(low, tin[u] ?: (lu = self(self, st[s++] = u, v)));
53-
if (lu >= tin[v]) {
54-
f(v, vector<int>(begin(st) + siz, begin(st) + s));
55-
s = siz;
27+
for (int u : adj[v])
28+
if (u != p) {
29+
int siz = s, lu = 0;
30+
low = min(low,
31+
tin[u] ?: (lu = self(self, st[s++] = u, v)));
32+
if (lu >= tin[v])
33+
f(st[s] = v, vi(siz + all(st) - (n - s))),
34+
s = siz;
5635
}
57-
}
5836
return low;
5937
};
60-
for (int i = 0; i <n; i++) if (!tin[i]) dfs(dfs, i, i);
38+
rep(i, 0, n) if (!tin[i]) dfs(dfs, i, i);
6139
}

0 commit comments

Comments
 (0)