Skip to content

Commit 187baf1

Browse files
committed
golf
1 parent cca1858 commit 187baf1

File tree

1 file changed

+8
-15
lines changed

1 file changed

+8
-15
lines changed

library/graphs/bridges_cuts/cuts.hpp

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,26 +24,19 @@ auto cuts(const auto& adj, int m) {
2424
int n = sz(adj), num_bccs = 0, q = 0, s = 0;
2525
vi bcc_id(m, -1), is_cut(n), tin(n), st(m);
2626
auto dfs = [&](auto&& self, int v, int p) -> int {
27-
int low = tin[v] = ++q, deg = 0;
27+
int low = tin[v] = ++q;
2828
for (auto [u, e] : adj[v]) {
2929
assert(v != u);
3030
if (e == p) continue;
31-
if (!tin[u]) {
32-
st[s++] = e;
33-
int low_ch = self(self, u, e);
34-
if (low_ch >= tin[v]) {
35-
is_cut[v] = 1;
36-
while (bcc_id[e] < 0) bcc_id[st[--s]] = num_bccs;
37-
num_bccs++;
38-
}
39-
low = min(low, low_ch);
40-
deg++;
41-
} else if (tin[u] < tin[v]) {
42-
st[s++] = e;
43-
low = min(low, tin[u]);
31+
if (tin[u] < tin[v]) st[s++] = e;
32+
int lu = -1;
33+
low = min(low, tin[u] ?: (lu = self(self, u, e)));
34+
if (lu >= tin[v]) {
35+
is_cut[v] = p >= 0 || tin[v] + 1 < tin[u];
36+
while (bcc_id[e] < 0) bcc_id[st[--s]] = num_bccs;
37+
num_bccs++;
4438
}
4539
}
46-
if (p == -1) is_cut[v] = (deg > 1);
4740
return low;
4841
};
4942
rep(i, 0, n) if (!tin[i]) dfs(dfs, i, -1);

0 commit comments

Comments
 (0)