题目:
zhx 和他的妹子去一个国家旅游,共有 N 个旅游景点,N-1 条双向连接的道路将它们联通起来,每一条道路有固定长度。一开始zhx 位于 1 号景点。
现在希望你能够求出旅行长度最小的方案,使得每个景点至少被访问到一次。
思路:整棵树的权值大小*2-最长链长度。
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 50000
struct Edge{
int x,y,z;
Edge(){}
Edge(int xx,int yy,int zz) {
x=xx,y=yy,z=zz;
}
};
int n;
vector<Edge> g[maxn+5];
int ans=0;
int dfs(int x,int fa) {
int s=0;
for(int i=0;i<g[x].size();i++){
Edge y=g[x][i];
if(y.y==fa) continue;
s=max(s,y.z+dfs(y.y,x));
}
return s;
}
int main() {
scanf("%d",&n);
for(int i=1;i<n;i++) {
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
g[x].push_back(Edge(x,y,z));
g[y].push_back(Edge(y,x,z));
ans+=2*z;
}
ans-=dfs(1,0);
printf("%d",ans);
return 0;
}