#include #include #include #include #include #include using namespace std; using namespace atcoder; using ll = long long; using mint = modint998244353; using vi = vector; using vvi = vector; using vvvi = vector; using vll = vector; using vvll = vector; using vvvll = vector; using vmi = vector; using vvmi = vector; using vvvmi = vector; #define all(a) (a).begin(), (a).end() #define rep2(i, m, n) for (int i = (m); i < (n); ++i) #define rep(i, n) rep2(i, 0, n) #define drep2(i, m, n) for (int i = (m)-1; i >= (n); --i) #define drep(i, n) drep2(i, n, 0) using p = pair; void solve(){ } ll inf = 2e18; int main(){ int n, m; ll c; cin >> n >> m >> c; vector> adj(2*n); rep(i, m){ int u, v; ll w; cin >> u >> v >> w; u--; v--; adj[u].push_back({v, w+c}); adj[u].push_back({v+n, c}); adj[u+n].push_back({v+n, w+c}); adj[v].push_back({u, w+c}); adj[v].push_back({u+n, c}); adj[v+n].push_back({u+n, w+c}); } vll dist1(n, inf); dist1[0] = 0; priority_queue, greater

> pq; pq.push({0, 0}); while(!pq.empty()){ auto [w, u] = pq.top(); pq.pop(); if(w > dist1[u])continue; for(auto v : adj[u]){ if(v.first >= n)continue; ll alt = dist1[u] + v.second; if(alt < dist1[v.first]){ dist1[v.first] = alt; pq.push({alt, v.first}); } } } vll dist2(2*n, inf); dist2[n-1] = 0; pq.push({0, n-1}); while(!pq.empty()){ auto [w, u] = pq.top(); pq.pop(); if(w > dist2[u])continue; for(auto v : adj[u]){ ll alt = dist2[u] + v.second; if(alt < dist2[v.first]){ dist2[v.first] = alt; pq.push({alt, v.first}); } } } rep2(i, 1, n){ if(i == n-1){ cout << dist1[i] << endl; continue; } ll tmp = dist1[n-1]; tmp = min(tmp, dist1[i] + min(dist2[i], dist2[i+n])); cout << tmp << endl; } return 0; }