importjava.util.*;publicclassMain{publicstaticvoidmain(String[] args){Scanner sc =newScanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[][] graph =newint[n+1][n+1];for(int i =0; i <= n ; i++)Arrays.fill(graph[i],Integer.MAX_VALUE);for(int i =0; i < m ; i++){int s = sc.nextInt();int t = sc.nextInt();int val = sc.nextInt();
graph[s][t]= val;}int start =1;int end = n;// 存储原点到每个节点的最短距离int[] minDis =newint[n +1];Arrays.fill(minDis,Integer.MAX_VALUE);// 判断当前的节点是否已经被访问过boolean[] visted =newboolean[n+1];// 原点到自身的距离为0
minDis[start]=0;for(int i =1; i <= n ; i++){// 初始化用于记录的最小值和当前节点int minVal =Integer.MAX_VALUE;int cur =1;// 寻找val最小的边for(int v =1; v <= n ; v++){if(!visted[v]&& minDis[v]< minVal){
cur = v;
minVal = minDis[v];}}
visted[cur]=true;// 更新minDis数组for(int v =1; v <= n ; v++){if(!visted[v]&& graph[cur][v]!=Integer.MAX_VALUE&& minDis[cur]+ graph[cur][v]< minDis[v]){
minDis[v]= minDis[cur]+ graph[cur][v];}}}if(minDis[end]==Integer.MAX_VALUE){System.out.println(-1);// 不能到达终点}else{System.out.println(minDis[end]);// 到达终点最短路径}}}