ogv

Untitled

ogv
Nov 22nd, 2019
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.77 KB | None | 0 0
  1. // Runtime: 92 ms, faster than 97.49% of Java online submissions for Critical Connections in a Network.
  2. // Memory Usage: 121.2 MB, less than 100.00% of Java online submissions for Critical Connections in a Network.
  3. class Solution {
  4.     List<Integer>[] adj;
  5.     int[] dfsOrder;
  6.     int lastNodeOrder;
  7.     int[] minConnected;
  8.     List<List<Integer>> result;
  9.    
  10.     public List<List<Integer>> criticalConnections(int n, List<List<Integer>> connections) {
  11.         adj = new ArrayList[n];        
  12.         for (int i = 0; i < n; i++) adj[i] = new ArrayList<Integer>();
  13.        
  14.         for (List<Integer> conn: connections) {            
  15.             int from = conn.get(0);
  16.             int to = conn.get(1);
  17.             adj[from].add(to);
  18.             adj[to].add(from);
  19.         }
  20.        
  21.         dfsOrder = new int[n];        
  22.         minConnected = new int[n];
  23.  
  24.         result = new ArrayList<>();
  25.        
  26.         for (int node = 0; node < n; node++)
  27.             if (dfsOrder[node] == 0) dfs(node, -1);        
  28.        
  29.         return result;
  30.     }
  31.    
  32.     private void dfs(int node, int parent) {
  33.         dfsOrder[node] = ++lastNodeOrder;
  34.         minConnected[node] = dfsOrder[node];
  35.        
  36.         for (int next: adj[node]) {
  37.             if (next == parent) continue;
  38.            
  39.             if (dfsOrder[next] == 0) {
  40.                 dfs(next, node);
  41.                 minConnected[node] = Math.min(minConnected[node], minConnected[next]);
  42.                 if (minConnected[next] == dfsOrder[next]) {
  43.                     result.add(Arrays.asList(node, next));
  44.                     continue;                    
  45.                 }
  46.             } else minConnected[node] = Math.min(minConnected[node], dfsOrder[next]);            
  47.         }                
  48.     }
  49. }
Advertisement
Add Comment
Please, Sign In to add comment