Skip to content

Commit 574241f

Browse files
committed
different style of handling multiple edges for bridges
1 parent 053684f commit 574241f

File tree

1 file changed

+10
-17
lines changed

1 file changed

+10
-17
lines changed

tests/library_checker_aizu_tests/graphs/bcc_callback_lib_checker_two_cc.test.cpp

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,32 +8,25 @@ int main() {
88
int n, m;
99
cin >> n >> m;
1010
vector<basic_string<int>> adj(n);
11-
vector<basic_string<array<int, 2>>> adj_e_id(n);
12-
for (int i = 0; i < n; i++) {
13-
adj[i] += i;
14-
adj_e_id[i] += {i, i};
15-
}
11+
for (int i = 0; i < n; i++) adj[i] += i;
12+
vector<array<int, 2>> edges(m);
1613
for (int i = 0; i < m; i++) {
1714
int u, v;
1815
cin >> u >> v;
1916
adj[u] += v;
2017
adj[v] += u;
21-
adj_e_id[u] += {v, n + i};
22-
adj_e_id[v] += {u, n + i};
18+
if (u > v) swap(u, v);
19+
edges[i] = {u, v};
2320
}
2421
UF uf(n);
25-
vector<bool> seen(n + m);
22+
ranges::sort(edges);
23+
for (int i = 1; i < m; i++)
24+
if (edges[i - 1] == edges[i])
25+
uf.join(edges[i][0], edges[i][1]);
2626
bcc_callback(adj, [&](const vi& nodes) {
2727
assert(sz(nodes) >= 2);
28-
int cnt_edges = 0;
29-
rep(i, 0, sz(nodes) - 1) for (auto [v, e_id] :
30-
adj_e_id[nodes[i]]) if (!seen[e_id] &&
31-
v != nodes[i]) {
32-
seen[e_id] = 1;
33-
cnt_edges++;
34-
}
35-
if (cnt_edges >= 2)
36-
for (int v : nodes) uf.join(v, nodes[0]);
28+
if (sz(nodes) == 2) return;
29+
for (int v : nodes) uf.join(v, nodes[0]);
3730
});
3831
vector<basic_string<int>> two_edge_ccs(n);
3932
rep(i, 0, n) two_edge_ccs[uf.find(i)] += i;

0 commit comments

Comments
 (0)