bfs基础算法水题
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<vector>
#include<queue>
using namespace std;
const int Max = 1e5+50;
int dist[Max];
vector<int> tree[Max];
int N, D, T;
void init()
{
for(int i = 0; i < Max-40; i ++)
{
tree[i].clear();
}
memset(dist, 0, sizeof(dist));
}
int ans;
void bfs()
{
int t = 0, dis = 0;
queue<int> q;
q.push(t);
ans ++;
while(!q.empty())
{
t = q.front();
q.pop();
if(dist[t] + 1 > D) continue;
for(int i = 0; i < tree[t].size(); i ++)
{
dist[tree[t][i]] = dist[t] + 1;
ans ++;
q.push(tree[t][i]);
}
}
}
int main()
{
int x, y;
scanf("%d", &T);
while(T --)
{
init();
scanf("%d%d", &N, &D);
for(int i = 0; i < N-1; i ++)
{
scanf("%d%d", &x, &y);
tree[x].push_back(y);
}
ans = 0;
bfs();
printf("%d\n", N-ans);
}
return 0;
}