(1회차 시도 성공)
import java.io.*;
import java.util.*;
class Node{
int end;
int cost;
public Node(int end, int cost) {
this.end = end;
this.cost = cost;
}
}
public class Main {
static List<Node>[] lists;
static int[] dist;
static boolean[] visited;
static int ans = -1;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int m = Integer.parseInt(br.readLine());
lists = new ArrayList[n+1];
for (int i = 0; i < n + 1; i++) {
lists[i] = new ArrayList<>();
}
dist = new int[n+1];
visited = new boolean[n+1];
Arrays.fill(dist, Integer.MAX_VALUE);
for (int i = 0; i < m; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
lists[a].add(new Node(b, c));
}
StringTokenizer st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
dijkstra(n, start, end);
bw.write(ans+"");
br.close();
bw.close();
}
private static void dijkstra(int n, int start, int end) {
PriorityQueue<Node> pq = new PriorityQueue<>((o1, o2) -> {
return o1.cost - o2.cost;
});
dist[start] = 0;
pq.add(new Node(start, 0));
while(!pq.isEmpty()) {
Node now = pq.poll();
if(!visited[now.end]){
visited[now.end] = true;
for (Node node : lists[now.end]) {
if(dist[node.end] > dist[now.end] + node.cost){
dist[node.end] = dist[now.end] + node.cost;
pq.add(new Node(node.end, dist[node.end]));
}
}
}
}
ans = dist[end];
}
}