链接:https://ac.nowcoder.com/acm/contest/547/E
来源:牛客网
题目描述
旅行商来到了一个新的国家,这个国家有N个城市,他们直接由N-1条道路相连接,每条道路的长度不尽相同
旅行商现在在1号城市,若他要每一个城市都游览一遍,他需要行走的最短路程是多少?
输入描述:
第一行一个数N (50000>N>1) 代表城市个数 之后N-1行 每行三个数x y z 代表从x到y的距离为z
输出描述:
输出最小距离
示例1
输入
复制
3 1 2 1 1 3 1
输出
复制
3
很简单的dfs
不会出现环,那么需要来回走两遍,减去最长路就行了
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5+10;
std::vector< pair<int,int> > G[maxn];
int n,sum;
int dfs(int u,int fa)
{
int res=0;
for(auto &v:G[u])
{
if(v.first==fa) continue;
res=max(res,v.second+dfs(v.first,u));
}
return res;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<n;i++)
{
int u,v,w;scanf("%d%d%d",&u,&v,&w);
G[u].emplace_back(v,w);
G[v].emplace_back(u,w);
sum+=w;
}
printf("%d\n",(sum<<1)-dfs(1,0));
return 0;
}