1. Edge Removal Connectivity Check
Intuition
Simulate removing each connection one-by-one. Run BFS/DFS to check if all n vertices remain reachable.
Algorithm
- Initialize
critical = []. - For each edge
connections[i] = [u, v]: - Construct graph excluding
connections[i]. - Run BFS from node 0.
- Count visited vertices.
- If visited count <
n, append[u, v]tocritical. - Return
critical.
#include <iostream>#include <vector>#include <queue> class Solution {public: std::vector<std::vector<int>> criticalConnections(int n, std::vector<std::vector<int>>& connections) { std::vector<std::vector<int>> bridges; for (size_t skip = 0; skip < connections.size(); ++skip) { std::vector<std::vector<int>> adj(n); for (size_t i = 0; i < connections.size(); ++i) { if (i == skip) continue; adj[connections[i][0]].push_back(connections[i][1]); adj[connections[i][1]].push_back(connections[i][0]); } std::vector<bool> visited(n, false); std::queue<int> q; q.push(0); visited[0] = true; int count = 0; while (!q.empty()) { int u = q.front(); q.pop(); count++; for (int v : adj[u]) { if (!visited[v]) { visited[v] = true; q.push(v); } } } if (count < n) { bridges.push_back(connections[skip]); } } return bridges; }}; int main() { Solution sol; std::vector<std::vector<int>> conn = {{0,1},{1,2},{2,0},{1,3}}; auto res = sol.criticalConnections(4, conn); std::cout << "Critical connections count: " << res.size() << " (Expected: 1)\n"; if (!res.empty()) std::cout << "Bridge: [" << res[0][0] << ", " << res[0][1] << "]\n"; return 0;}Time & Space Complexity
- Time complexity:
O(E * (V + E)) - Space complexity:
O(V + E)