#include #include using namespace std; int const infinity = 0x3F3F3F3F; struct Edge {int v; int w;}; int main () { int n, m; cin >> n >> m; vector > adj (n); for (int j = 0; j < m; j++) { int u, v, w; cin >> u >> v >> w; u -= 1; v -= 1; adj[u].push_back ({v, w}); adj[v].push_back ({u, w}); } vector d (n, infinity); vector vis (n); int u = 0; d[u] = 0; while (u != -1) { vis[u] = true; for (auto e : adj[u]) if (d[e.v] > d[u] + e.w) d[e.v] = d[u] + e.w; u = -1; for (int v = 0; v < n; v++) if (!vis[v]) if (u == -1 || d[u] > d[v]) u = v; } int y = n - 1; cout << d[y] << endl; return 0; }