Untitled

 avatar
unknown
plain_text
10 months ago
1.5 kB
2
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