Untitled
unknown
plain_text
2 years ago
1.5 kB
8
Indexable
class Solution {
public int networkDelayTime(int[][] times, int n, int k) {
int dist[]=new int[n+1];
int max=Integer.MIN_VALUE;
Arrays.fill(dist,Integer.MAX_VALUE);
ArrayList<ArrayList<Pair>> adj=new ArrayList<>();
PriorityQueue<Pair> heap=new PriorityQueue<>((x,y)-> x.time-y.time);
for(int i=0;i<=n;i++)
{
adj.add(new ArrayList<Pair>());
}
for(int i=0;i<times.length;i++)
{
int source=times[i][0];
int dest=times[i][1];
int time=times[i][2];
adj.get(source).add(new Pair(time,dest));
}
int start=times[0][0];
dist[start]=0;
heap.add(new Pair(0,start));
while(!heap.isEmpty())
{
int time=heap.peek().time;
int node=heap.peek().dest;
heap.remove();
for(int i=0;i<adj.get(node).size();i++)
{
int timeTaken=adj.get(node).get(i).time;
int dest=adj.get(node).get(i).dest;
if(time+timeTaken<dist[dest])
{
dist[dest]=time+timeTaken;
heap.add(new Pair(dist[dest],dest));
}
}
}
for(int i=1;i<=n;i++)
{
max=Math.max(max,dist[i]);
}
return max==Integer.MAX_VALUE?-1:max;
}
}
class Pair
{
int time=0;
int dest=0;
public Pair(int time,int dest)
{
this.time=time;
this.dest=dest;
}
}Editor is loading...
Leave a Comment