#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n,k,d[N],fa[N];
vector<int> g[N];
map<int,int> mp[N];
int find(int x)
{
	return fa[x]==x?x:fa[x]=find(fa[x]);
}
bool vis[N];
int main()
{
    cin>>n>>k;
    for(int i=1;i<n;i++)
    {
        int u,v;
        cin>>u>>v;
        g[u].push_back(v);
        g[v].push_back(u);
        d[u]++;
        d[v]++;
		mp[u][v]=mp[v][u]=1;
    }
	vector<int> point;
    for(int i=1;i<=n;i++) if(d[i]==k) point.push_back(i),vis[i]=1;
    while(true)
    {
		if(point.empty()) break;
		for(int u:point)
			for(int v:g[u])
			{
				d[u]--;d[v]--;mp[u][v]=mp[v][u]=0;
			}
		point.clear();
		for(int i=1;i<=n;i++) if(d[i]==k) point.push_back(i),vis[i]=1;
    }
    for(int i=1;i<=n;i++) fa[i]=i;
    for(int i=1;i<=n;i++)
		for(int u:g[i])
		{
			if(mp[u][i])
			{
				fa[find(i)]=find(u);
			}
		}
	int ans=0;
	for(int i=1;i<=n;i++) if(fa[i]==i&&!vis[i]) ans++;
	cout<<ans<<endl;
}

0 comments

No comments so far...