1192. Critical Connections in a Network
https://leetcode.com/problems/critical-connections-in-a-network/

Last updated
https://leetcode.com/problems/critical-connections-in-a-network/

Last updated
Input: n = 4, connections = [[0,1],[1,2],[2,0],[1,3]]
Output: [[1,3]]
Explanation: [[3,1]] is also accepted./*
* @lc app=leetcode id=1192 lang=cpp
*
* [1192] Critical Connections in a Network
*/
// @lc code=start
class Solution {
public:
int dfs(unordered_map<int, vector<int>> &edges, int cur, int par, int level, vector<int> &ms, vector<vector<int>> &res) {
ms[cur] = level;
for (const auto nei : edges[cur]) {
if (nei == par) continue;
if (ms[nei] != INT_MAX) {
ms[cur] = min(ms[cur], ms[nei]);
continue;
}
ms[cur] = min(ms[cur], dfs(edges, nei, cur, level + 1, ms, res));
}
if (ms[cur] == level && cur != 0) res.push_back({par, cur});
return ms[cur];
}
vector<vector<int>> criticalConnections(int n, vector<vector<int>>& connections) {
unordered_map<int, vector<int>> edges;
for (const auto &c : connections) {
edges[c[0]].push_back(c[1]);
edges[c[1]].push_back(c[0]);
}
vector<int> ms(n, INT_MAX);
vector<vector<int>> res;
dfs(edges, 0, -1, 0, ms, res);
return res;
}
};
// @lc code=end