#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void solve() { int n, m; std::cin >> n >> m; std::vector>> g(n), rg(n); for (int i = 0; i < m; i++) { int u, v; long long w; std::cin >> u >> v >> w; u--, v--; g[u].emplace_back(w, v); rg[v].emplace_back(w, u); } using info = std::pair; auto cal = [&](std::vector>>& g, int start) { std::priority_queue, std::greater> pq; std::vector dp(n, 1e16); pq.emplace(0, start); dp[start] = 0; while (!pq.empty()) { auto [d, u] = pq.top(); pq.pop(); if (dp[u] == d) { for (auto [w, v] : g[u]) { if (dp[v] > dp[u] + w) { dp[v] = dp[u] + w; pq.emplace(dp[v], v); } } } } return dp; }; auto d1 = cal(rg, n - 1); auto d2 = cal(rg, n - 2); auto d3 = cal(g, n - 1); auto d4 = cal(g, n - 2); auto p = [&](std::vector& A) { for (auto& x : A) std::cout << x << ' '; std::cout << '\n'; }; p(d1); p(d2); p(d3); p(d4); for (int k = 0; k < n - 2; k++) { long long ans = 1e16; long long a = d1[k] + d3[n - 2] + d4[k]; // k-> n-1 -> n-2 -> k long long b = d2[k] + d4[n - 1] + d3[k]; // k-> n-2 -> n-1 -> k; ans = std::min({ans, a, b}); if (ans >= 1e16) ans = -1; std::cout << ans << '\n'; } } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int t = 1; // std::cin >> t; while (t--) { solve(); } }