2*所有边的权值 - 最长的路径权值
2026-08-20 14:31:50
发布于:广东
5阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll N = 1e5 + 5;
ll n;
vector<pair<ll, ll>> g[N];
ll dist[N];//记录每个点距离起点的距离
void dfs(ll u, ll fa) {//当前的点 当前点的父节点
for (auto [v, w] : g[u]) {
if (v == fa) continue;//不走回头路
dist[v] = dist[u] + w;
dfs(v, u);
}
}
int main() {
cin >> n;
ll sum = 0;
for (ll i = 1; i < n; i++) {
ll u, v, w;
cin >> u >> v >> w;
g[u].push_back({v, w});
g[v].push_back({u, w});
sum += w;
}
dfs(1, 0);
ll max_dist = 0;
for (ll i = 1; i <= n; i++) {
max_dist = max(max_dist, dist[i]);
}
cout << 2 * sum - max_dist << endl;
return 0;
}
这里空空如也


有帮助,赞一个