#include<bits/stdc++.h>
using namespace std;
//#define DEBUG
#define int long long
constexpr int maxn=100005;
constexpr int inf=3e18;
int pa[maxn][18],lvl[maxn],pre[maxn],pos[maxn],_ptr=1;
vector<pair<int,int>> adj[maxn];
void dfs(int i,int p){
pre[i]=_ptr;
for(auto&[w,x]:adj[i]){
if(x==p) continue;
lvl[x]=lvl[i]+1;
pa[x][0]=i;
dfs(x,i);
}
pos[i]=_ptr++;
}
int lca(int a,int b){
if(lvl[a]>lvl[b]) swap(a,b);
for(int j=17;j>=0;--j) if(lvl[pa[b][j]]>=lvl[a])
b=pa[b][j];
if(a==b) return a;
for(int j=17;j>=0;--j) if(pa[a][j]!=pa[b][j])
a=pa[a][j],b=pa[b][j];
return pa[a][0];
}
int f(int i,int k){
for(auto&[w,x]:adj[i]){
if(x==pa[i][0]) continue;
if(pre[x]<=pos[k]&&pos[k]<=pos[x])
return max(w,f(x,k));
}
return 0;
}
signed main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n,k; cin>>n>>k;
for(int i=1;i<n;++i){
int x,y,w; cin>>x>>y>>w;
adj[x].emplace_back(w,y);
adj[y].emplace_back(w,x);
}
pa[1][0]=1;
dfs(1,0);
for(int j=0;j<17;++j) for(int i=1;i<=n;++i){
pa[i][j+1]=pa[pa[i][j]][j];
}
int ans=0;
for(int x=1;x<=n;++x) for(int y=x+1;y<=n;++y){
int z=lca(x,y),w=max(f(z,x),f(z,y)),l=lvl[x]+lvl[y]-2*lvl[z];
#ifdef DEBUG
cout<<x<<" "<<y<<" -> "<<z<<'\n';
#endif
ans+=(w-l>=k?2:0);
}
cout<<ans<<'\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |