Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35841 | 22fhq | 【S】T4 | C++ | 解答错误 | 0 | 2044 MS | 14972 KB | 1327 | 2025-01-05 19:05:23 |
#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; }