Pagini recente » Cod sursa (job #900300) | Cod sursa (job #1183109) | Cod sursa (job #3325088) | Cod sursa (job #1830738) | Cod sursa (job #1860541)
#include<bits/stdc++.h>
#define maxN 100005
#define INF INT_MAX
using namespace std;
int n,k,x,y,dp[maxN],sol,depth[maxN],dp2[maxN],vect[5],l[maxN],t[maxN],tata;
bool seen[maxN],OnBeach[maxN],Solutie[maxN];
vector<int> v[maxN],sons[maxN];
void IsOnBeach(int nod)
{
l[nod]=INF;
seen[nod]=1;
for(vector<int>::iterator it=v[nod].begin();it!=v[nod].end();it++)
{
if(!seen[*it])
{
sons[nod].push_back(*it);
t[*it]=nod;
IsOnBeach(*it);
l[nod]=min(l[nod],1+l[*it]);
}
}
if(sons[nod].empty()) OnBeach[nod]=1;
if(l[nod]==INF) l[nod]=0;
}
void Finish(int nod)
{
seen[nod]=1;
for(vector<int>::iterator it=v[nod].begin();it!=v[nod].end();it++)
{
if(!seen[*it])
{
int fiu=*it;
int tata=t[*it];
int pas=1;
while(tata)
{
if((pas+dp[tata])<dp[fiu])
{
dp2[fiu]=dp[fiu];
dp[fiu]=pas+dp[tata];
}
else
if((pas+dp[tata]<dp2[fiu]))
{
dp2[fiu]=pas+dp[tata];
}
tata=t[tata];
}
Finish(*it);
}
}
}
void Solve(int nod)
{
//dp[i]-distanta minima de la nod la o statiune de pe plaja
//dp2[i]- a doua distanta minima
//depth[i]-adancimea nodului
//l-lungimea minima a subarborelui
// l[nod]=INF;
dp[nod]=INF;
dp2[nod]=INF;
if(OnBeach[nod] && nod!=1) dp[nod]=0;
seen[nod]=0;
for(vector<int>::iterator it=v[nod].begin();it!=v[nod].end();it++)
{
if(seen[*it])
{
depth[*it]=1+depth[nod];
Solve(*it);
if((1+dp[*it])<dp[nod])
{
dp2[nod]=dp[nod];
dp[nod]=1+dp[*it];
}
else
if((1+dp[*it])<dp2[nod])
{
dp2[nod]=1+dp[*it];
}
}
}
}
int main()
{
freopen("statiuni.in","r",stdin);
freopen("statiuni.out","w",stdout);
scanf("%d%d",&n,&k);
for(int i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
}
IsOnBeach(1);
if(v[1].size()==1) OnBeach[1]=1;
depth[1]=0;
Solve(1);
Finish(1);
for(int i=1;i<=n;i++)
{
int dv=0;
vect[++dv]=dp[i];
vect[++dv]=dp2[i];
if(OnBeach[1]) vect[++dv]=depth[i];
sort(vect+1,vect+dv+1);
if(vect[1]<=k && vect[2]<=k) Solutie[i]=1;
}
for(int i=1;i<=n;i++) sol=sol+Solutie[i];
printf("%d\n",sol);
return 0;
}