// includes {{{ #include #include #include #include #include #include #include #include #include #include #include #include // #include // #include // #include // #include // #include // }}} using namespace std; using ll = long long; const int N = 1e5; std::vector>> g; int n, m; int main() { std::ios::sync_with_stdio(false), std::cin.tie(0); cin >> n >> m; g.resize(n); for(int i = 0; i < m; i++) { int a, b, c; std::cin >> a >> b >> c; a--; b--; g[a].emplace_back(b, c); g[b].emplace_back(a, c); } vector< ll > dist(n * 2, 1e18); // dijkstra {{{ { using P = tuple< ll, int, int >; priority_queue< P, vector< P >, greater< P > > pq; pq.emplace(0, 0, 0); dist[0] = 0; dist[n] = 0; while(pq.size()) { ll di; int used, i; tie(di, used, i) = pq.top(); pq.pop(); if(dist[i] < di) continue; for(auto to : g[i - used * n]) { int j, co; tie(j, co) = to; j = j + used * n; ll ndi = di + co; if(dist[j] > ndi) { dist[j] = ndi; pq.emplace(ndi, used, j); } if(used == 0) { if(dist[j + n] > di) { dist[j + n] = di; pq.emplace(di, 1, j + n); } } } } } // }}} for(int i = 0; i < n; i++) { cout << dist[i] + dist[i + n] << "\n"; } return 0; }