Advertisement
ogv

Untitled

ogv
Aug 28th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.84 KB | None | 0 0
  1. /*
  2. Runtime: 6 ms, faster than 94.73% of Java online submissions for Network Delay Time.
  3. Memory Usage: 49.4 MB, less than 66.67% of Java online submissions for Network Delay Time.
  4. */
  5. class Solution {    
  6.     public int networkDelayTime(int[][] times, int N, int K) {
  7.         List<List<Edge>> graph = new ArrayList<List<Edge>>(N);
  8.        
  9.         for (int i = 0; i < N; i++) {
  10.             graph.add(new ArrayList<Edge>());
  11.         }
  12.  
  13.         for (int[] time: times) {
  14.             int from = time[0] - 1;
  15.             int to = time[1] - 1;
  16.             int delay  = time[2];
  17.             graph.get(from).add(new Edge(to, delay));          
  18.         }
  19.        
  20.         int[] delays = new int[N];
  21.         for (int i = 0; i < N; i++) {
  22.             delays[i] = -1;
  23.         }
  24.        
  25.         calculateDelays(K - 1, graph, delays, 0);
  26.        
  27.         int maxDelay = -1;
  28.        
  29.         for (int delay: delays) {
  30.             if (delay == -1) {
  31.                 return -1;                
  32.             }
  33.            
  34.             maxDelay = Math.max(maxDelay, delay);
  35.         }
  36.        
  37.         return maxDelay;
  38.     }
  39.    
  40.     private void calculateDelays(int from, List<List<Edge>> graph, int[] delays, int delaySoFar) {
  41.         if (delays[from] != -1) {
  42.             if (delays[from] > delaySoFar) {
  43.                 delays[from] = delaySoFar;                
  44.             }
  45.             return;
  46.         }
  47.        
  48.         delays[from] = delaySoFar;
  49.        
  50.         for (Edge edge: graph.get(from)) {            
  51.             calculateDelays(edge.node, graph, delays, delaySoFar + edge.delay);
  52.         }                    
  53.     }
  54.    
  55.     private class Edge {
  56.         public int node;
  57.         public int delay;
  58.        
  59.         public Edge(int node, int delay) {
  60.             this.node = node;
  61.             this.delay = delay;
  62.         }
  63.     }
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement