Advertisement
Guest User

Untitled

a guest
Mar 19th, 2020
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.41 KB | None | 0 0
  1. import java.util.*;
  2. import java.io.*;
  3.  
  4. public class Main {
  5.     public static void main(String[] args) throws IOException {
  6.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  7.         PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
  8.  
  9.         StringTokenizer st = new StringTokenizer(br.readLine());
  10.         int n = Integer.parseInt(st.nextToken()); // num nodes
  11.         int m = Integer.parseInt(st.nextToken()); // num edges
  12.         int start = Integer.parseInt(st.nextToken()) - 1; // starting node
  13.  
  14.         ArrayList<ArrayList<Pair>> adj = new ArrayList<>();
  15.         for (int i = 0; i < n; i++) {
  16.             adj.add(new ArrayList<>());
  17.         }
  18.  
  19.         for (int i = 0; i < m; i++) {
  20.             st = new StringTokenizer(br.readLine());
  21.             int a = Integer.parseInt(st.nextToken()) - 1; // node 1
  22.             int b = Integer.parseInt(st.nextToken()) - 1; // node 2
  23.             int c = Integer.parseInt(st.nextToken()); // edge weight
  24.  
  25.             adj.get(a).add(new Pair(b, c)); // directed graph
  26.         }
  27.  
  28.         long[] dist = dijkstra(start, adj);
  29.         for (int i = 0; i < dist.length; i++) {
  30.             pw.print(dist[i] + " ");
  31.         }
  32.  
  33.         pw.close();
  34.     }
  35.  
  36.     private static long[] dijkstra(int start, ArrayList<ArrayList<Pair>> adj) {
  37.         long[] dist = new long[adj.size()];
  38.         Arrays.fill(dist, Long.MAX_VALUE);
  39.  
  40.         dist[start] = 0;
  41.  
  42.         //boolean[] processed = new boolean[n];
  43.  
  44.         PriorityQueue<Pair> pq = new PriorityQueue<>();
  45.         pq.add(new Pair(start, 0));
  46.  
  47.         while (!pq.isEmpty()) {
  48.             Pair head = pq.poll();
  49.  
  50.             //if (processed[head.id]) continue;
  51.             //processed[head.id] = true;
  52.  
  53.             for (Pair nbr : adj.get(head.id)) {
  54.                 if (dist[head.id] + nbr.dist < dist[nbr.id]) {
  55.                     dist[nbr.id] = dist[head.id] + nbr.dist;
  56.                     pq.add(new Pair(nbr.id, dist[nbr.id]));
  57.                 }
  58.             }
  59.         }
  60.  
  61.         return dist;
  62.     }
  63. }
  64.  
  65. class Pair implements Comparable<Pair> {
  66.     public int id;
  67.     public long dist;
  68.  
  69.     public Pair(int id, long dist) {
  70.         this.id = id;
  71.         this.dist = dist;
  72.     }
  73.  
  74.     @Override
  75.     public int compareTo(Pair o) {
  76.         long diff = this.dist - o.dist;
  77.         if (diff < 0) return -1;
  78.         if (diff > 0) return 1;
  79.         return 0;
  80.     }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement