1 条题解
-
0
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e5+5; int n,g1[N],g2[N],st[N],fa[N]; vector<int>e[N]; void dfs(int x,int p) { st[++st[0]]=x,fa[x]=p; for(int y:e[x])if(y!=p)dfs(y,x); } int sol(int k) { int ans=0; for(int i=1;i<=n;i++)g1[i]=g2[i]=0; for(int i=n;i;i--) { int x=st[i],p=fa[x]; if(g1[x]+g2[x]+1>=k)ans++,g1[x]=-1; if(g1[x]+1>g1[p])g2[p]=g1[p],g1[p]=g1[x]+1; else g2[p]=max(g2[p],g1[x]+1); } return ans; } int main() { scanf("%d",&n); for(int i=1,x,y;i<n;i++)scanf("%d%d",&x,&y),e[x].push_back(y),e[y].push_back(x); dfs(1,0); for(int i=1;i<=n;) { int now=sol(i),l=i,r=n,mid,res; while(l<=r)mid=l+r>>1,(sol(mid)==now?l=mid+1,res=mid:r=mid-1); while(i<=res)printf("%d\n",now),i++; } return 0; }
- 1
信息
- ID
- 6847
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者