按题解第一篇的思路写的,但提交结果均mle,求指点一下
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=5e5+10;
int a[N];
int dist[N];
struct tr
{
int v;
int w;
}tree[N];
vector<tr> e[N];
int ans=0;
void dfs(int u)
{
for(int i=0;i<e[u].size();i++)
{
if(e[u][i].v==u) continue;
dfs(e[u][i].v);
dist[u]=max(dist[u],dist[e[u][i].v]+e[u][i].w);
}
for(int i=0;i<e[u].size();i++)
{
if(e[u][i].v==u) continue;
ans+=(dist[u]-dist[e[u][i].v]-e[u][i].w);
}
}
void solve()
{
int n,k;
cin>>n>>k;
for(int i=1;i<=n-1;i++)
{
int u,v,w;
cin>>u>>v>>w;
e[u].push_back({v,w});
e[v].push_back({u,w});
}
dfs(k);
cout<<ans<<endl;
}
signed main()
{
int t=1;
while(t--)
{
solve();
}
}