题目
#include<bits/stdc++.h>
using namespace std;
int n,d;
int cnt=0;
int vis[100001];
int head[100001];
struct op{
int pos;
int num;
};
queue<op> q;
struct zja{
int next,to;
}edge[100001];
inline void add(int u,int v){
edge[++cnt].to=v;
edge[cnt].next=head[u];
head[u]=cnt;
return;
}
signed main(){
scanf("%d%d",&n,&d);
for(int i=1;i<=n-1;i++){
int u,v;
scanf("%d%d",&u,&v);
add(u,v);
add(v,u);
}
int ans=-1;
q.push((op){1,0});
vis[1]=1;
while(!q.empty()){
op ztj=q.front();
q.pop();
if(ztj.num>d){
continue;
}else{
ans++;
}
for(int i=head[ztj.pos];i;i=edge[i].next){
if(vis[edge[i].to]) continue;
vis[edge[i].to]=1;
q.push((op){edge[i].to,ztj.num+1});
}
}
cout<<ans;
return 0;
}