只需要告诉我为什么 RE 即可。
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+7;
int n,k,u,v,w,cur,siz[N],tot=0,temp[N],ans=0,a[N];
bool del[N];
vector< pair<int,int> >ve[N];
void dfs1(int x,int fa){
siz[x]=1ll;
int maxs=0ll;
for(int j=0;j<ve[x].size();j++){
int to=ve[x][j].first;
if(del[to] || to==fa)continue;
dfs1(to,x);
if(cur!=-1)return ;
maxs=max(maxs,siz[to]);
siz[x]+=siz[to];
}
maxs=max(maxs,n-siz[x]);
if(maxs<=n/2){
cur=x;
siz[fa]=n-siz[x];
}
return ;
}
void dfs2(int x,int fa,int len){
++ans;
temp[++tot]=len;
for(int j=0;j<ve[x].size();j++){
int to=ve[x][j].first;
int w=ve[x][j].second;
if(del[to] || to==fa || len<tot)continue;
dfs2(to,x,len-tot+a[w]);
}
return ;
}
void run(int x){
for(int j=0;j<ve[x].size();j++){
int to=ve[x][j].first;
int w=ve[x][j].second;
if(del[to])continue;
int tmp=tot;
dfs2(to,x,a[to]);
for(int i=tmp+1;i<=tot;i++){
for(int j=1;j<=tmp;j++){
if(temp[i]+temp[j]<=k)++ans;
}
}
}
tot=0;
del[x]=true;
for(int j=0;j<ve[x].size();j++){
int to=ve[x][j].first;
if(del[to])continue;
cur=-1;
n=siz[to];
dfs1(to,x);
run(cur);
}
return ;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
del[i]=false;
}
for(int i=1;i<n;i++){
cin>>u>>v>>w;
ve[u].push_back(make_pair(v,w));
ve[v].push_back(make_pair(u,w));
}
cur=-1;
dfs1(1,1);
run(cur);
cout<<ans<<"\n";
return 0;
}