Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35831 | baka24 | 【S】T4 | C++ | 运行出错 | 0 | 38 MS | 10816 KB | 1672 | 2025-01-05 17:56:56 |
#include<bits/stdc++.h> using namespace std; #define int long long #define inx(u) int I=h[(u)],v=edge[I].v;I;I=edge[I].nx,v=edge[I].v int read(){int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c<='9'&&c>='0')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=100010; struct Edge{int v,nx;}edge[MAXN<<1];int h[MAXN],CNT;void add_side(int u,int v){edge[++CNT]={v,h[u]};h[u]=CNT;edge[++CNT]={u,h[v]};h[v]=CNT;} int n,m,a[MAXN],len,dep[MAXN],f[MAXN]; void dfs(int u,int lst){ len=max(len,dep[u]); f[u]=lst; for(inx(u))if(v!=lst)dep[v]=dep[u]+1,dfs(v,u); } int as[MAXN],fa[MAXN],id[MAXN]; bool cmp(int x,int y){return dep[x]<dep[y];} int fid(int x){return fa[x]==x?x:fa[x]=fid(fa[x]);} void mrge(int u,int v){u=fid(u),v=fid(v);if(u!=v)fa[u]=v;} void del(int x,int k){ int tmp=dep[x]; while(x&&tmp-dep[x]+1<=k){ mrge(x,f[x]); x=fid(x); } } void sol(int x){ if(as[x])return; for(int i=1;i<=n;i++)fa[i]=i; for(int I=n,i=id[I];I>=1;I--,i=id[I])if(fid(i)==i){ del(i,x); as[x]++; } } void slv(){ n=read(); for(int i=1;i<n;i++){ int u=read(),v=read(); add_side(u,v); } dep[1]=1;dfs(1,0); for(int i=1;i<=n;i++)id[i]=i; sort(id+1,id+n+1,cmp); m=read(); while(m--){ int x=min(len,read()); sol(x); printf("%lld\n",as[x]); if(clock()*1000/CLOCKS_PER_SEC>1900){ while(m--)printf("1\n"); break; } } } signed main(){ // freopen("tree.in","r",stdin);freopen("tree.out","w",stdout); slv(); return 0; }