Advertisement
Guest User

Untitled

a guest
Mar 28th, 2020
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1. class Solution {
  2. public:
  3.     int criticalConnectionHelper(unordered_map<int, vector<int>> &graph, int n, int myNode, int myRank, vector<int> &ranks, vector<vector<int>> &res)
  4. {
  5.     if (ranks[myNode] != -2)
  6.     {
  7.         return ranks[myNode];
  8.     }
  9.  
  10.     int lowestRank = myRank;
  11.     ranks[myNode] = myRank;
  12.     for(auto neighbor : graph[myNode])
  13.     {
  14.         if (ranks[neighbor] == myRank - 1 || ranks[neighbor] == n)
  15.         {
  16.             continue;
  17.         }
  18.  
  19.         int neighborRank = criticalConnectionHelper(graph, n, neighbor, myRank + 1, ranks, res);
  20.         lowestRank = min(lowestRank, neighborRank);
  21.         if (neighborRank > myRank)
  22.         {
  23.             res.push_back({min(myNode, neighbor), max(myNode, neighbor)});
  24.         }
  25.     }
  26.  
  27.     ranks[myNode] = n;
  28.     return lowestRank;
  29. }
  30.    
  31.     vector<vector<int>> criticalConnections(int n, vector<vector<int>>& connections) {
  32.         unordered_map<int, vector<int>> graph;
  33.  
  34.     for(auto &c : connections)
  35.     {
  36.         graph[c[0]].push_back(c[1]);
  37.         graph[c[1]].push_back(c[0]);
  38.     }
  39.  
  40.     vector<int> ranks(n, -2);
  41.     vector<vector<int>> res;
  42.     criticalConnectionHelper(graph, n, 0, 0, ranks, res);
  43.     return res;
  44.     }
  45. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement