提交时间:2025-01-05 19:05:23
运行 ID: 35841
#include<bits/stdc++.h> using namespace std; int n; vector<int>e[100005]; int fa[100005],dp[100005]; set<pair<int,int>>s; void read(int &x){ x=0; char c=getchar(); while(!isdigit(c))c=getchar(); while(isdigit(c))x=(x<<1)+(x<<3)+(c^48),c=getchar(); } void dfs(int p){ for(int x:e[p]){ if(x==fa[p])continue; fa[x]=p; dp[x]=dp[p]+1; dfs(x); } } bool book[100005]; void qu(int k){ for(int i=1;i<=n;i++){ s.insert({dp[i],i}); book[i]=0; } int res=0; while(s.size()){ res++; auto it=s.end(); it--; int now=it->second; for(int i=1;i<=k&&now;i++){ if(!book[now])s.erase({dp[now],now}); book[now]=1; now=fa[now]; } } printf("%d\n",res); } int main(){ read(n); for(int i=1;i<n;i++){ int u,v; read(u),read(v); e[u].push_back(v); e[v].push_back(u); } dfs(1); int q; read(q); if(n<=3000) while(q--){ int k; read(k); qu(k); } else{ q--; int k; read(k); qu(k); while(q--){ printf("%d\n",n); } } return 0; }