#include <stdio.h> #include <stdlib.h> int main() { int u, v, w; int i, j; int n, m, t; scanf("%d%d", &t, &m); n = 5000; int** arc = (int**)malloc((n+1) * sizeof(int*)); for (i = 0; i < n+1; i++) { arc[i] = (int*)malloc((n+1)* sizeof(int)); } int shortest[n + 1]; int patharc[n + 1]; int final[n + 1]; for (i = 0; i < n + 1; i++) { for (j = 0; j < n + 1; j++) { arc[i][j] = 10000000; } } for (i = 0; i < m; i++) { scanf("%d%d%d", &u, &v, &w); arc[u][v] = arc[v][u] = w; } for (i = 0; i < n + 1; i++) { shortest[i] = arc[1][i]; patharc[i] = 0; final[i] = 0; } final[1] = 1; int k; for (int l = 1; l < n; l++) { int min = 10000000; for (i = 1; i <= n; i++) { if (final[i] != 1 && shortest[i] < min) { min = shortest[i]; k = i; } } final[k] = 1; if (k == t) { printf("%d", shortest[k]); return 0; } for (j = 1; j <= n; j++) { if (final[j] != 1 && shortest[j] > min + arc[k][j]) { shortest[j] = min + arc[k][j]; patharc[j] = k; } } } printf("%d", -1); for(i=0;i<n+1;i++) { free(arc[i]); } free(arc); return 0; }