1 条题解

  • 0
    @ 2026-5-5 16:28:57
    #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
    上传者