Advertisement
FahimFaisal

CONTEST4_MEET_iN_THE_MIDDLE_FAHIM

Mar 11th, 2020
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.52 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package contest;
  7.  
  8.  
  9.  
  10. import java.io.File;
  11. import java.io.FileNotFoundException;
  12. import java.util.LinkedList;
  13. import java.util.PriorityQueue;
  14. import java.util.Queue;
  15. import java.util.Scanner;
  16.  
  17.  
  18. /**
  19.  *
  20.  * @author acer
  21.  */
  22. public class solution1 {
  23.     public static int node;
  24.     //public static int [] d;
  25.     public static int [] parent;
  26.     public static int [] [] matrix;
  27.      public static int [] color;
  28.     public static LinkedList[] ln;
  29.      
  30.      public static PriorityQueue<Integer> q =new PriorityQueue<Integer>();
  31.    
  32.    
  33.     public static void main(String[] args) {
  34.   //float a=0;
  35.        
  36.             Scanner scn=new Scanner(System.in);
  37.            
  38.            
  39.            
  40.             node=scn.nextInt();
  41.            
  42.  
  43.             int edge=scn.nextInt();
  44.            
  45.            
  46.          //   out.println(v);
  47.             matrix=new int[node][node];
  48.             color=new int[node];
  49.             parent=new int[node];
  50.             //d=new int[node];
  51.              ln=new LinkedList[node];
  52.  
  53.               for(int i=0;i<node;i++){
  54.    
  55.       ln[i]=new LinkedList<String>();
  56.               }
  57.    
  58.               int i=0;
  59.             while(i<edge)
  60.             {
  61.            
  62.             int x=scn.nextInt();
  63.             int y=scn.nextInt();
  64.             int w=scn.nextInt();
  65.            
  66.             ln[x].add(y+","+w);
  67.             i++;
  68.             }
  69.             /*
  70.             for(int k=0;k<node;k++){
  71.       System.out.println(k+"=>");
  72.       for(int j=0;j<ln[k].size();j++){
  73.          
  74.         String str=ln[k].get(j).toString();
  75.           System.out.println(str);
  76.       }
  77.    }*/
  78.      
  79.      
  80.           int []d=new int[node];
  81.            int []d1=new int[node];
  82.        
  83.            
  84.         d=dijkstra(0);
  85.         d1=dijkstra(node-1);
  86.        
  87.        /* for(int p:d1){
  88.             System.out.print(p+",");
  89.         }*/
  90.         int min =Integer.MAX_VALUE;
  91.   int result=-1;
  92.  
  93.   for(int q=0;q<node;q++){
  94.     if(d[q]+d1[q]<min &&(d[q]<=100000 && d1[q]<=100000)){
  95.       result=q;
  96.     min=d[q]+d1[q];
  97.     }
  98.          
  99.    
  100.      
  101.   }
  102.  
  103.   System.out.println(result);
  104.        
  105.          
  106.     }
  107.     public static int [] dijkstra(int s) {
  108.         int[]d=new int[node];
  109.         //System.out.println("=========================");
  110.        
  111.        
  112.        for(int i=0;i<node;i++) {
  113.          
  114.             d[i]=9999;
  115.              //q.add(d[i]);
  116.             color[i]=0;
  117.             parent[i]=-1;
  118.        
  119.         }
  120.    
  121.     d[s]=0;
  122.     parent[s]=-1;
  123.     q.add(d[s]);
  124.  
  125.    for(int i=0;i<node;i++){
  126.       int u=minVertex(d,color);
  127.       for(int j=0;j<ln[u].size();j++){
  128.         String str=ln[u].get(j).toString();
  129.         String [] splitA;
  130.         splitA=str.split(",");
  131.         int t=Integer.parseInt(splitA[0]);
  132.         int dst=Integer.parseInt(splitA[1]);
  133.         if(color[t]!=1 && d[u]!=Integer.MAX_VALUE && d[u]+dst<d[t]){
  134.           d[t]=d[u]+dst;
  135.         }
  136.        
  137.       }
  138.        //System.out.print(i+"=>");
  139.    }
  140.         //System.out.println();
  141.    return d;
  142.    
  143.     }
  144.     public static int minVertex(int d[],int check[]){
  145.     int min=Integer.MAX_VALUE;
  146.     int min_index=-1;
  147.     for(int i=0;i<d.length;i++){
  148.       if(check[i]!=1 && d[i]<=min){
  149.         min=d[i];
  150.         min_index=i;
  151.       }
  152.      
  153.      
  154.     }
  155.     check[min_index]=1;
  156.     return min_index;
  157.   }
  158.    
  159.  
  160.      
  161.  
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement