#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; using ull = unsigned long long; const ll INF = 1e16; const ll MOD = 1e9 + 7; #define REP(i, n) for(int i = 0; i < n; i++) using P = pair; using T = pair>; int main() { ll n, m; cin >> n >> m; vector> g(n); REP(i, m) { ll a, b, c; cin >> a >> b >> c; a--; b--; g[a].push_back({ b, c }); g[b].push_back({ a, c }); } vector> dist(n, vector(2, INF)); dist[0][0] = dist[0][1] = 0; priority_queue, greater> que; que.push({ 0, {0, 0} }); while (!que.empty()) { auto tmp = que.top(); que.pop(); ll now = tmp.second.first, d = tmp.first, f = tmp.second.second; if (dist[now][f] < d) continue; for (auto &e : g[now]) { ll v = e.first, c = e.second; if (f == 0) { if (dist[v][0] > d + c) { dist[v][0] = d + c; que.push({ d + c, {v, 0} }); } if (dist[v][1] > d) { dist[v][1] = d; que.push({ d, {v, 1} }); } } else { if (dist[v][1] > d + c) { dist[v][1] = d + c; que.push({ d + c, {v, 1} }); } } } } /* REP(i, n) { cout << dist[i][0] << " " << dist[i][1] << endl; } */ REP(i, n) { cout << dist[i][0] + dist[i][1] << endl; } }