Skip to content

Commit eb7563e

Browse files
authored
Create count-unreachable-pairs-of-nodes-in-an-undirected-graph.cpp
1 parent e0f26d2 commit eb7563e

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Time: O(n)
2+
// Space: O(n)
3+
4+
// flood fill, bfs, math
5+
class Solution {
6+
public:
7+
long long countPairs(int n, vector<vector<int>>& edges) {
8+
vector<vector<int>> adj(n);
9+
for (const auto& e : edges) {
10+
adj[e[0]].emplace_back(e[1]);
11+
adj[e[1]].emplace_back(e[0]);
12+
}
13+
vector<bool> lookup(n);
14+
const auto& bfs = [&](int u) {
15+
vector<int> q = {u};
16+
lookup[u] = true;
17+
int64_t result = 1;
18+
while (!empty(q)) {
19+
vector<int> new_q;
20+
for (const auto& u : q) {
21+
for (const auto& v : adj[u]) {
22+
if (lookup[v]) {
23+
continue;
24+
}
25+
lookup[v] = true;
26+
++result;
27+
new_q.emplace_back(v);
28+
}
29+
}
30+
q = move(new_q);
31+
}
32+
return result;
33+
};
34+
35+
int64_t result = 0;
36+
for (int u = 0; u < size(adj); ++u) {
37+
if (lookup[u]) {
38+
continue;
39+
}
40+
const int64_t cnt = bfs(u);
41+
result += cnt * (n - cnt);
42+
n -= cnt;
43+
}
44+
return result;
45+
}
46+
};

0 commit comments

Comments
 (0)