Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public:
- int criticalConnectionHelper(unordered_map<int, vector<int>> &graph, int n, int myNode, int myRank, vector<int> &ranks, vector<vector<int>> &res)
- {
- if (ranks[myNode] != -2)
- {
- return ranks[myNode];
- }
- int lowestRank = myRank;
- ranks[myNode] = myRank;
- for(auto neighbor : graph[myNode])
- {
- if (ranks[neighbor] == myRank - 1 || ranks[neighbor] == n)
- {
- continue;
- }
- int neighborRank = criticalConnectionHelper(graph, n, neighbor, myRank + 1, ranks, res);
- lowestRank = min(lowestRank, neighborRank);
- if (neighborRank > myRank)
- {
- res.push_back({min(myNode, neighbor), max(myNode, neighbor)});
- }
- }
- ranks[myNode] = n;
- return lowestRank;
- }
- vector<vector<int>> criticalConnections(int n, vector<vector<int>>& connections) {
- unordered_map<int, vector<int>> graph;
- for(auto &c : connections)
- {
- graph[c[0]].push_back(c[1]);
- graph[c[1]].push_back(c[0]);
- }
- vector<int> ranks(n, -2);
- vector<vector<int>> res;
- criticalConnectionHelper(graph, n, 0, 0, ranks, res);
- return res;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement