(1)会熟练默写数组建图
(2)会熟练默写堆优化的dijsktra算法
import java.io.*;
import java.util.*;
class Main{
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static final int N=100000;
static final int INF=(int)1e9;
static int[] h=new int[N];
static int[] w=new int[N];
static int[] e=new int[N];
static int[] ne=new int[N];
static int[]dist=new int[N];
static boolean[] st=new boolean[N];
static int idx;
static int start,end;
static int n,m;
public static void add(int a,int b,int c){
e[idx]=b;
w[idx]=c;
ne[idx]=h[a];
h[a]=idx++;
}
public static int dij(){
PriorityQueue<int[]>pq=new PriorityQueue<>(n,(a,b)->a[1]-b[1]);
int INF=(int)1e8;
Arrays.fill(dist,INF);
pq.add(new int[]{start,0});
while(!pq.isEmpty()){
int[]cur=pq.poll();
int ver=cur[0];
int d=cur[1];
if(st[ver])continue;
st[ver]=true;
for(int i=h[ver];i!=-1;i=ne[i]){
int j=e[i];
if(dist[j]>d+w[i]){
dist[j]=d+w[i];
pq.add(new int[]{j,dist[j]});
}
}
}
return dist[n]==INF?-1:dist[end];
}
public static void main(String[]args)throws IOException{
Arrays.fill(h,-1);
Arrays.fill(dist,INF);
String[] s=br.readLine().split(" ");
n=Integer.parseInt(s[0]);
m=Integer.parseInt(s[1]);
start=Integer.parseInt(s[2]);
end=Integer.parseInt(s[3]);
while(m-->0){
s=br.readLine().split(" ");
int a=Integer.parseInt(s[0]);
int b=Integer.parseInt(s[1]);
int c=Integer.parseInt(s[2]);
add(a,b,c);
add(b,a,c);
}
System.out.println(dij());
}
}