Guest User

Untitled

a guest
Mar 27th, 2020
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.32 KB | None | 0 0
  1. import java.io.*;
  2. import java.math.*;
  3. import java.security.*;
  4. import java.text.*;
  5. import java.util.*;
  6. import java.util.concurrent.*;
  7. import java.util.regex.*;
  8.  
  9. //Problem Page: https://www.hackerrank.com/challenges/dijkstrashortreach/problem
  10.  
  11. public class Solution {
  12.  
  13.     static class Node implements Comparable<Node>{
  14.         int vertex;
  15.         int w;
  16.         public Node(int d, int w){
  17.             vertex=d;
  18.             this.w=w;
  19.         }
  20.         public int compareTo(Node o){
  21.             return this.w - o.w;
  22.         }
  23.  
  24.         public String toString(){
  25.             return ("v:"+vertex+" W:"+w);
  26.         }
  27.  
  28.     }
  29.  
  30.     // Complete the shortestReach function below.
  31.     static int[] shortestReach(int n, int[][] edges, int s) {
  32.  
  33.  
  34.             HashMap<Integer, ArrayList<Node>> hm = new HashMap<Integer, ArrayList<Node>>();
  35.             int e = edges.length;
  36.             for(int i=0;i<e;i++){
  37.                 int u = edges[i][0];
  38.                 int v = edges[i][1];
  39.                 int d = edges[i][2];
  40.                 if(!hm.containsKey(u)){
  41.                     hm.put(u,new ArrayList<Node>());
  42.                 }
  43.                 hm.get(u).add(new Node(v,d));
  44.                 if(!hm.containsKey(v)){
  45.                     hm.put(v, new ArrayList<Node>());
  46.                 }
  47.                 hm.get(v).add(new Node(u,d));
  48.             }
  49.  
  50.            //System.out.println(hm);
  51.  
  52.             PriorityQueue<Node> pq = new PriorityQueue<Node>();
  53.             pq.add(new Node(s,0));
  54.  
  55.  
  56.             //in central place
  57.  
  58.             int d[] = new int[n+1];
  59.             for(int i=0;i<=n;i++){
  60.                 d[i]=Integer.MAX_VALUE;
  61.             }
  62.             d[s]=0;
  63.  
  64.             while(pq.size()>0){
  65.                 Node u = pq.poll();
  66.                 for(int i=0;i<hm.get(u.vertex).size();i++){
  67.                     Node v = hm.get(u.vertex).get(i);
  68.                     if(d[v.vertex]>d[u.vertex]+v.w){
  69.                         d[v.vertex]=d[u.vertex]+v.w;
  70.                         pq.add(v);
  71.                     }
  72.                 }
  73.             }
  74.  
  75.             int ans[] = new int[n-1];
  76.             int j=0;
  77.             for(int i=1;i<=n;i++){
  78.                 if(i!=s){
  79.                     ans[j]=d[i];
  80.                     j++;
  81.                 }
  82.                    
  83.             }
  84.            
  85.             for(int i=0;i<n-1;i++){
  86.                 if(ans[i]==Integer.MAX_VALUE){
  87.                     ans[i]=-1;
  88.                 }
  89.             }
  90.  
  91.             return ans;
  92.            
  93.  
  94.  
  95.  
  96.  
  97.     }
  98.      
  99.     //private static final Scanner scanner = new Scanner(System.in);
  100.  
  101.     public static void main(String[] args) throws IOException {
  102.  
  103.         FastReader scanner = new FastReader();
  104.  
  105.         BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
  106.  
  107.         int t = scanner.nextInt();
  108.         //scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
  109.  
  110.         for (int tItr = 0; tItr < t; tItr++) {
  111.             String[] nm = scanner.nextLine().split(" ");
  112.  
  113.             int n = Integer.parseInt(nm[0]);
  114.  
  115.             int m = Integer.parseInt(nm[1]);
  116.  
  117.             int[][] edges = new int[m][3];
  118.  
  119.             for (int i = 0; i < m; i++) {
  120.                 String[] edgesRowItems = scanner.nextLine().split(" ");
  121.                 //scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
  122.  
  123.                 for (int j = 0; j < 3; j++) {
  124.                     int edgesItem = Integer.parseInt(edgesRowItems[j]);
  125.                     edges[i][j] = edgesItem;
  126.                 }
  127.             }
  128.  
  129.             int s = scanner.nextInt();
  130.             //scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
  131.  
  132.             int[] result = shortestReach(n, edges, s);
  133.  
  134.             for (int i = 0; i < result.length; i++) {
  135.                 bufferedWriter.write(String.valueOf(result[i]));
  136.  
  137.                 if (i != result.length - 1) {
  138.                     bufferedWriter.write(" ");
  139.                 }
  140.             }
  141.  
  142.             bufferedWriter.newLine();
  143.         }
  144.  
  145.         bufferedWriter.close();
  146.  
  147.         //scanner.close();
  148.     }
  149.     static class FastReader
  150.     {
  151.         BufferedReader br;
  152.         StringTokenizer st;
  153.  
  154.         public FastReader()
  155.         {
  156.             br = new BufferedReader(new
  157.                      InputStreamReader(System.in));
  158.         }
  159.  
  160.         String next()
  161.         {
  162.             while (st == null || !st.hasMoreElements())
  163.             {
  164.                 try
  165.                 {
  166.                     st = new StringTokenizer(br.readLine());
  167.                 }
  168.                 catch (IOException  e)
  169.                 {
  170.                     e.printStackTrace();
  171.                 }
  172.             }
  173.             return st.nextToken();
  174.         }
  175.  
  176.         int nextInt()
  177.         {
  178.             return Integer.parseInt(next());
  179.         }
  180.  
  181.         long nextLong()
  182.         {
  183.             return Long.parseLong(next());
  184.         }
  185.  
  186.         double nextDouble()
  187.         {
  188.             return Double.parseDouble(next());
  189.         }
  190.  
  191.         String nextLine()
  192.         {
  193.             String str = "";
  194.             try
  195.             {
  196.                 str = br.readLine();
  197.             }
  198.             catch (IOException e)
  199.             {
  200.                 e.printStackTrace();
  201.             }
  202.             return str;
  203.         }
  204.     }
  205. }
Add Comment
Please, Sign In to add comment