class Solution {
public int networkDelayTime(int[][] times, int n, int k) {
/*Q26 graph playlist ,bellman ford
we are not using any temp array here as we dont need result of every iteration
we just need minimum path from source to every dest and
we will return max of all min-paths as our answer
*/
int path[] = new int[n];
Arrays.fill(path , Integer.MAX_VALUE);
path[k-1] = 0;
int ans = -1;
for(int i = 0 ;i < n-1 ; i++){
for(int time[] : times){
int u = time[0] , v = time[1] , wt = time[2];
if(path[u-1] == Integer.MAX_VALUE)
continue;
//turned into 0 based indexing
path[v-1] = Math.min(path[v-1] ,path[u-1] + wt );
}
}
//finding maximum of all min paths
for(int i = 0 ;i < n ; i++)
ans = Math.max(ans , path[i]);
//if any min path is still max_Value we return -1
return ans == Integer.MAX_VALUE ? -1 : ans;
}
}