错误代码:
```cpp
#include<bits/stdc++.h>
#define i64 long long int
using namespace std;
int read()
{
int n=0,k=1;
char ch=getchar();
while(ch>'9'||ch<'0')
{
if(ch=='-')
{
k=-1;
}
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
n=n*10+ch-'0';
ch=getchar();
}
return n*k;
}
struct edge
{
int to,dis,next;
}E[80001];
int head[40001];
int Ecnt=0;
void addedge(int from,int to,int dis)
{
Ecnt++;
E[Ecnt].dis=dis;
E[Ecnt].to=to;
E[Ecnt].next=head[from];
head[from]=Ecnt;
}
int tot;
int K;
int n;
int root;
int siz[40001];
int f[40001];
bool vis[40001];
void getroot(int u,int fa)
{
f[u]=0;
siz[u]=1;
for(int r=head[u];r;r=E[r].next)
{
int v=E[r].to;
if(vis[v]||v==fa)
{
continue;
}
getroot(v,u);
f[u]=max(f[u],siz[v]);
siz[u]+=siz[v];
}
f[u]=max(f[u],tot-siz[u]);
if(f[u]<f[root])
{
root=u;
}
}
int Cnt;
int Dis[40001];
void getdis(int u,int fa,int dist)
{
Cnt++;
Dis[Cnt]=dist;
for(int r=head[u];r;r=E[r].next)
{
int v=E[r].to;
if(v==fa||vis[v])
{
continue;
}
getdis(v,u,dist+E[r].dis);
}
}
int ans=0;
int getans(int u,int dist)
{
Cnt=0;
getdis(u,0,dist);
sort(Dis+1,Dis+Cnt+1);
int L=1,R=Cnt,ans=0;
while(L<=R)
{
if(Dis[L]+Dis[R]<=K)
{
ans+=(R-L);
L++;
}
else
{
R--;
}
}
return ans;
}
void div(int u)
{
ans+=getans(u,0);
vis[u]=1;
for(int r=head[u];r;r=E[r].next)
{
int v=E[r].to;
if(vis[v])
{
continue;
}
ans-=getans(v,E[r].dis);
f[0]=998244353;
root=0;
//tot=siz[v];此处没有赋初值
getroot(v,0);
div(root);
}
}
int main()
{
freopen("test.out","r",stdin);
int u,v,w;
n=read();
for(int r=1;r<n;r++)
{
u=read();
v=read();
w=read();
addedge(u,v,w);
addedge(v,u,w);
}
K=read();
f[0]=998244353;
tot=n;
getroot(1,0);
div(root);
cout<<ans;
return 0;
}
/*
*/
```
by _Remake_ @ 2022-07-17 11:18:03
补个输出
output:
```
9499500
```
by _Remake_ @ 2022-07-17 12:54:25
@[小粉兔](/user/10703)
by OldDriverTree @ 2023-07-12 12:30:30