Advertisement
ogv

Untitled

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