<pre name="code" class="cpp">#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define MAXN (1000+5)
int n, s, k;
vector<int> con[MAXN], nodes[MAXN];
int f[MAXN];
bool cover[MAXN];
void init(){
for(int i = 0; i < MAXN; i++) con[i].clear(), nodes[i].clear();
memset(f, 0, sizeof(f));
}
void dfs(int u, int be, int deep){
f[u] = be;
int next_s = con[u].size();
if(next_s == 1 && deep > k){
nodes[deep].push_back(u);
return;
}
for(int i = 0; i < next_s; i++){
int v = con[u][i];
if(v != be) dfs(v, u, deep+1);
}
}
void put_fk(int u, int be, int deep){
if(deep > k) return;
cover[u] = true;
int next_s = con[u].size();
for(int i = 0; i < next_s; i++){
int v = con[u][i];
if(v != be) put_fk(v, u, deep+1);
}
}
int work(){
memset(cover, 0, sizeof(cover));
int ans = 0;
for(int i = n-1; i > k; i--){
int len = nodes[i].size();
for(int j = 0; j < len; j++){
int u = nodes[i][j];
if(cover[u]) continue;
int fk = u;
for(int tmp = 1; tmp <= k; tmp++) fk = f[fk];
put_fk(fk, -1, 0);
ans++;
}
}
return ans;
}
int main(){
int T;
scanf("%d", &T);
while(T--){
init();
scanf("%d%d%d", &n, &s, &k);
for(int i = 1; i < n; i++){
int a, b;
scanf("%d%d", &a, &b);
con[a].push_back(b);
con[b].push_back(a);
}
dfs(s, -1, 0);
printf("%d\n", work());
}
return 0;
}
LA 3902
最新推荐文章于 2016-10-13 21:18:04 发布