官方题解:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
typedef long long ll;
vector<int>a[2000010];
queue<int>q;
int du[2000010]={0},de[2000010]={0};
int main()
{
int n,k,u,v;
scanf("%d%d",&n,&k);
for(int i=1;i<n;i++)
{
scanf("%d%d",&u,&v);
du[u]++;
du[v]++;
a[u].push_back(v);
a[v].push_back(u);
}
for(int i=1;i<=n;i++)
{
if(du[i]==1){q.push(i);de[i]=1;}///第几层
}
ll sum=0;
int up=k/2;
while(!q.empty())
{
int t=q.front();
q.pop();
if(de[t]>up)break;
sum++;
int x;
for(int i=0;i<a[t].size();i++)
{
x=a[t][i];
du[x]--;
if(!de[x]&&du[x]==1)
{
q.push(x);
de[x]=de[t]+1;
}
}
}
if((k&1)&&(sum<n))sum++;
printf("%lld\n",sum);
return 0;
}