测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A23778. 货物运输A 国有n座城市,依次以1,2,...,n编号,其中 1 号城市为首都。这n座城市由n - 1条双向道路连接,第i条道路(1≤i< n)连接编号为ui,vi的两座城市,道路长度为li。任意两座城市间均可通过双向道路到达。现在 A 国需要从首都向各个城市运送货物。具体来说,满载货物的车队会从首都开出,经过一座城市时将对应的货物送出,因此车队需要经过所有城市。A 国希望你设计一条路线,在从首…

填空题 困难

题目描述

货物运输

A 国有n座城市,依次以1,2,...,n编号,其中 1 号城市为首都。这n座城市由n - 1条双向道路连接,第i条道路(1≤i< n)连接编号为ui,vi的两座城市,道路长度为li。任意两座城市间均可通过双向道路到达。

现在 A 国需要从首都向各个城市运送货物。具体来说,满载货物的车队会从首都开出,经过一座城市时将对应的货物送出,因此车队需要经过所有城市。A 国希望你设计一条路线,在从首都出发经过所有城市的前提下,最小化经过的道路长度总和。注意一座城市可以经过多次,车队最后可以不返回首都。

输入格式

第一行,一个正整数n,表示 A 国的城市数量。

接下来n - 1行,每行三个整数ui,vi,li,表示一条双向道路连接编号为ui,vi的两座城市,道路长度为li

输出格式

一行,一个整数,表示你设计的路线所经过的道路长度总和。

样例

输入样例 1

4
1 2 6
1 3 1
3 4 5

输出样例 1

18

输入样例 2

7
1 2 1
2 3 1
3 4 1
7 6 1
6 5 1
5 1 1

输出样例 2

9

数据范围

对于30% 的测试点,保证 1≤n≤8。

对于另外30% 的测试点,保证仅与一条双向道路连接的城市恰有两座。

对于所有测试点,保证 1≤n≤105 ,1≤ui,vi≤n , 1≤li≤109

参考答案

#include <algorithm> #include <cstdio> #include <vector> using namespace std; const int N = 1e5 + 5; int n; vector<vector<pair<int, int>>> e; long long s, mx; void dfs(int u, int f, long long d) { mx = max(d, mx); for (auto p : e[u]) { if (p.first != f) { dfs(p.first, u, d + p.second); } } } int main() { scanf("%d", &n); e.resize(n + 1); for (int i = 1; i < n; i++) { int u, v, w; scanf("%d%d%d", &u, &v, &w); e[u].emplace_back(make_pair(v, w)); e[v].emplace_back(make_pair(u, w)); s += w; } dfs(1, 0, 0); printf("%lld\n", s * 2 - mx); return 0; }
上一题 下一题