1 条题解
-
0
#include<bits/stdc++.h> using namespace std;using ll=long long;const int N=1e6+10; int n,k,ans[N],mx[N];vector<int>A[N],t[N]; void merge(auto &x,auto &y,int &p,int &q){ if(x.size()<y.size())x.swap(y),swap(p,q); for(int i=0,d=x.size()-y.size();i<y.size();i++)if((x[i+d]+=y[i])>x[p]||(x[i+d]==x[p]&&p<i+d))p=i+d; } void dfs(int u,int fa=0){ for(int v:A[u])if(v^fa)dfs(v,u),merge(t[u],t[v],mx[u],mx[v]); t[u].push_back(1);if(t[u][mx[u]]==1)mx[u]=t[u].size()-1;ans[u]=t[u].size()-1-mx[u]; } int main(){ scanf("%d",&n);for(int i=1,u,v;i<n;i++)scanf("%d%d",&u,&v),A[u].push_back(v),A[v].push_back(u); dfs(1);for(int i=1;i<=n;i++)printf("%d\n",ans[i]);return 0; }
- 1
信息
- ID
- 6844
- 时间
- 4500ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者