题解:P14076 [GESP202509 六级] 货物运输
前情提要
题目传送门。
想不到本蒟蒻在有生之年能抢上 GESP 的题解。
场上看到 T1 这么难直接绝望,去看 T2,竟然是这么水的 DFS,严重怀疑 CCF 在坑考生。
思路
我们不妨先来考虑如果车队最后必须返回首都,路程应该是多远。
题目明确指出“这
树有一个特性,两个点之间只有唯一的通路。即,如果你要从
那么,如果你要走遍所有的点,且走完回到原点,每条边必须走
我们回到原来的问题,车队最后可以不返回首都。
如果车队最后留在
代码实现
用 DFS 查找每一个节点,用
#include<bits/stdc++.h>
#define int long long//以防万一开long long
using namespace std;
int n,sum=0,ans=-1e9;//ans初始极小值
int vis[100005];
struct node{
int v,w;
};
vector<node> e[100005];
void dfs(int x,int val)//x为当前查询节点,val为1到x的距离
{
//DFS模板
if(vis[x]) return ;
vis[x]=1;
for(node i:e[x]) dfs(i.v,val+i.w);//每次向下搜,val加道路距离
ans=max(ans,val);//ans取最大值
}
signed main()
{
cin>>n;
for(int i=1;i<n;i++)
{
int u,v,w;
cin>>u>>v>>w;
e[u].push_back({v,w});
e[v].push_back({u,w});
sum+=w;//sum累加总长度
}
dfs(1,0);
cout<<sum*2-ans;//sum别忘*2
return 0;
}