Skip to content

Commit d5b24be

Browse files
committed
update bridge tests
1 parent a856de1 commit d5b24be

File tree

2 files changed

+34
-14
lines changed

2 files changed

+34
-14
lines changed

tests/library_checker_aizu_tests/graphs/bcc_callback_aizu_two_edge_cc.test.cpp

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,26 @@ int main() {
1515
adj[v] += u;
1616
}
1717
vector<pii> bridges;
18+
vector<bool> seen(n);
1819
bcc_callback(adj, [&](const vi& nodes) {
19-
assert(sz(nodes) >= 2);
20-
if (sz(nodes) == 2)
21-
bridges.emplace_back(min(nodes[0], nodes[1]),
22-
max(nodes[0], nodes[1]));
20+
int count_edges = 0;
21+
rep(i, 0, sz(nodes) - 1) {
22+
seen[nodes[i]] = 1;
23+
for (int v : adj[nodes[i]])
24+
if (!seen[v]) {
25+
// edge nodes[i] <=> v is in current BCC
26+
count_edges++;
27+
}
28+
}
29+
if (count_edges == 1) {
30+
assert(sz(nodes) == 2);
31+
pii bridge(nodes[0], nodes[1]);
32+
if (bridge.first > bridge.second)
33+
swap(bridge.first, bridge.second);
34+
bridges.push_back(bridge);
35+
// nodes[0] <=> nodes[1] is a bridge
36+
return;
37+
}
2338
});
2439
ranges::sort(bridges);
2540
for (auto [u, v] : bridges)

tests/library_checker_aizu_tests/graphs/bcc_callback_lib_checker_two_cc.test.cpp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,29 @@ int main() {
88
int n, m;
99
cin >> n >> m;
1010
vector<basic_string<int>> adj(n);
11-
for (int i = 0; i < n; i++) adj[i] += i;
12-
vector<array<int, 2>> edges(m);
1311
for (int i = 0; i < m; i++) {
1412
int u, v;
1513
cin >> u >> v;
1614
adj[u] += v;
1715
adj[v] += u;
18-
if (u > v) swap(u, v);
19-
edges[i] = {u, v};
2016
}
2117
UF uf(n);
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]);
18+
vector<bool> seen(n);
2619
bcc_callback(adj, [&](const vi& nodes) {
27-
assert(sz(nodes) >= 2);
28-
if (sz(nodes) == 2) return;
20+
int count_edges = 0;
21+
rep(i, 0, sz(nodes) - 1) {
22+
seen[nodes[i]] = 1;
23+
for (int v : adj[nodes[i]])
24+
if (!seen[v]) {
25+
// edge nodes[i] <=> v is in current BCC
26+
count_edges++;
27+
}
28+
}
29+
if (count_edges == 1) {
30+
assert(sz(nodes) == 2);
31+
// nodes[0] <=> nodes[1] is a bridge
32+
return;
33+
}
2934
for (int v : nodes) uf.join(v, nodes[0]);
3035
});
3136
vector<basic_string<int>> two_edge_ccs(n);

0 commit comments

Comments
 (0)