#include #include #include #define llint long long #define inf 1e18 using namespace std; typedef pair P; struct edge{ llint to, cost; edge(llint a, llint b){ to = a, cost = b; } }; int n, m; vector G[100005], G2[200005]; llint dist[100005], dist2[200005]; void dijkstra(vector G[], llint dist[], llint V) { for(int i = 1; i <= V; i++) dist[i] = inf; dist[1] = 0; priority_queue< P, vector

, greater

> Q; Q.push( make_pair(0, 1) ); llint v, d; while(Q.size()){ d = Q.top().first; v = Q.top().second; Q.pop(); if(dist[v] < d) continue; for(int i = 0; i < G[v].size(); i++){ if(dist[G[v][i].to] > d + G[v][i].cost){ dist[G[v][i].to] = d + G[v][i].cost; Q.push( make_pair(dist[G[v][i].to], G[v][i].to) ); } } } } int main(void) { cin >> n >> m; llint a, b, c; for(int i = 1; i <= m; i++){ cin >> a >> b >> c; G[a].push_back(edge(b, c)); G[b].push_back(edge(a, c)); G2[a].push_back(edge(b, c)); G2[b].push_back(edge(a, c)); G2[a+n].push_back(edge(b+n, c)); G2[b+n].push_back(edge(a+n, c)); G2[a].push_back(edge(b+n, 0)); G2[b].push_back(edge(a+n, 0)); } dijkstra(G, dist, n); dijkstra(G2, dist2, 2*n); for(int i = 1; i <= n; i++) dist2[i] = min(dist2[i], dist2[i+n]); for(int i = 1; i <= n; i++){ cout << dist[i] + dist2[i] << endl; } return 0; }