vector<int> mn(n, inf), vis(n); mn[0] = 0; int ans = 0; for (int t = 0; t < n; ++t) { int u = -1; for (int j = 0; j < n; j++) { if (!vis[j] && (u == -1 || mn[j] < mn[u])) { u = j; } } vis[u] = 1; ans += mn[u]; for (int v = 0; v < n; v++) { mn[v] = min(mn[v], E[u][v]); } } cout << ans << endl;
vector<tuple<int, int, int>> E(m); for (int i = 0; i < m; ++i) { int u, v, w; cin >> u >> v >> w; u--, v--; E[i] = { w, u, v }; }
// Kruskal sort(E.begin(), E.end()); DSU dsu(n); vector<vector<pair<int, int>>> tree(n); for (auto [w, u, v] : E) { if (dsu.uno(u, v)) { tree[u].push_back({ w, v }); tree[v].push_back({ w, u }); } }
auto dp = [&](int s) { vector<int> dp(n); auto dfs = [&](thisauto&& self, int u, int p) -> void { for (auto [w, v] : tree[u]) { if (v == p) continue; dp[v] = max(dp[u], w); self(v, u); } }; dfs(s, -1); return dp; }; auto dp0 = dp(0), dpn = dp(n - 1);
int ans = inf << 1; // inf 小了 for (auto [w, u, v] : E) { if (dp0[u] <= w && dpn[v] <= w) { ans = min(ans, w + max(dp0[u], dpn[v])); } if (dpn[u] <= w && dp0[v] <= w) { ans = min(ans, w + max(dpn[u], dp0[v])); } // if (u == 1 && v == n || u == n && v == 1) { // ans = min(ans, w); // } // 无需特判 } cout << ans << endl;
vector<vector<pair<int, int>>> E(n); while (m--) { int u, v, w; cin >> u >> v >> w; u--, v--; E[u].push_back({ w, v }); E[v].push_back({ w, u }); }
auto dp = [&](int s) { vector<int> vis(n); vector<int> dp(n, inf); dp[s] = 0; priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> Q; Q.push({ 0, s }); while (!Q.empty()) { auto [w, u] = Q.top(); Q.pop(); if (vis[u]) continue; vis[u] = 1; for (auto [w, v] : E[u]) { if (!vis[v]) { Q.push({ w, v }); dp[v] = max(dp[u], w); } } } return dp; }; auto dp0 = dp(0), dpn = dp(n - 1);
int ans = inf << 1; for (int u = 0; u < n; u++) { for (auto [w, v] : E[u]) { if (dp0[u] <= w && dpn[v] <= w) { ans = min(ans, w + max(dp0[u], dpn[v])); } if (dpn[u] <= w && dp0[v] <= w) { ans = min(ans, w + max(dpn[u], dp0[v])); } } } cout << ans << endl;