#include <stdio.h> #include <limits.h> #define N 5000 int main() { int n, m; scanf("%d %d", &n, &m); int vcost[N][N]; int distance[N]; int vstate[N]; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { vcost[i][j] = (i == j) ? 0 : INT_MAX; } } for (int i = 0; i < m; i++) { int u, v, w; scanf("%d %d %d", &u, &v, &w); vcost[u - 1][v - 1] = w; vcost[v - 1][u - 1] = w; } for (int i = 0; i < N; i++) { vstate[i] = 0; distance[i] = vcost[0][i]; } vstate[0] = 1; for (int i = 1; i < N; i++) { int min = INT_MAX; int k = 0; for (int j = 0; j < N; j++) { if (vstate[j] == 0 && distance[j] < min) { k = j; min = distance[j]; } } vstate[k] = 1; for (int j = 0; j < N; j++) { if (vstate[j] == 0 && vcost[k][j] != INT_MAX) { if (( distance[k] + vcost[k][j] < distance[j])) { distance[j] = distance[k] + vcost[k][j]; } } } } if (distance[n - 1] != INT_MAX) { printf("%d\n", distance[n - 1]); } else { printf("-1\n"); } return 0; }