ogv

Untitled

ogv
Aug 28th, 2019
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.22 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.         // prepare edges
  8.         List<List<Edge>> edges = new ArrayList<List<Edge>>();
  9.        
  10.         for (int i = 0; i < N; i++) {
  11.             edges.add(new ArrayList<Edge>());
  12.         }
  13.        
  14.         for (int[] time: times) {
  15.             int from = time[0] - 1;
  16.             int to = time[1] - 1;
  17.             int delay = time[2];
  18.            
  19.             edges.get(from).add(new Edge(to, delay));
  20.         }
  21.        
  22.         boolean[] processed = new boolean[N];
  23.         boolean[] reached = new boolean[N];
  24.         int[] delays = new int[N];
  25.  
  26.         // Dijkstra
  27.         int next = K - 1;
  28.         int delay = 0;
  29.        
  30.         while (next < N) {
  31.             processed[next] = true;
  32.             reached[next] = true;
  33.             delays[next] = delay;
  34.            
  35.             for (Edge edge: edges.get(next)) {
  36.                 if (!reached[edge.node] || (delay + edge.weight < delays[edge.node])) {                    
  37.                     delays[edge.node] = delay + edge.weight;
  38.                     reached[edge.node] = true;
  39.                 }                        
  40.             }
  41.            
  42.             next = N;
  43.             delay = Integer.MAX_VALUE;
  44.            
  45.             for (int i = 0; i < N; i++) {
  46.                 if (!processed[i] && reached[i] && delays[i] < delay) {
  47.                     next = i;
  48.                     delay = delays[i];
  49.                 }
  50.             }            
  51.         }
  52.        
  53.         // find network delay time
  54.         int max = -1;
  55.         for (int i = 0; i < N; i++) {
  56.             if (!reached[i]) {
  57.                 return -1;
  58.             }
  59.             if (delays[i] > max) {
  60.                 max = delays[i];
  61.             }
  62.         }
  63.                
  64.         return max;
  65.     }
  66.    
  67.     class Edge {
  68.         public int node;
  69.         public int weight;
  70.        
  71.         public Edge(int node, int weight) {
  72.             this.node = node;
  73.             this.weight = weight;
  74.         }
  75.     }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment