#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=5e5+10;
int n,s,ans;
int t[maxn],tot,maxx,vis[maxn];
vector <pair<int,int> > g[maxn];
void dfs(int now,int val){
vis[now]=1;
if(g[now].size()==1){
t[++tot]=val;
maxx=max(maxx,val);
return ;
}
for(auto u:g[now]){
int v=u.first;
int w=u.second;
if(vis[v]) continue;
dfs(v,w+val);
}
return ;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n>>s;
for(int i=1;i<n;i++){
int u,v,w;
cin>>u>>v>>w;
g[u].push_back(make_pair(v,w));
g[v].push_back(make_pair(u,w));
}
dfs(s,0);
for(int i=1;i<=tot;i++){
ans+=maxx-t[i];
}
cout<<ans;
return 0;
}
思路就是把每条链的权值都算出来,然后找出最大值,答案难道不是
∑i=1totmaxx−ti
吗?
求大佬解答qwq