CSES - Shared codeLink to this code:
https://cses.fi/paste/c86aab3fa8009e642ef1c2/
/*
=============================================================================
/\ \ / /\ |\ /| |===========
/ \ \ / / \ | \ / | |
/ \ \ / / \ | \ / | |
/ \ | / \ | \ / | |===========
/--------\ | /--------\ | \ / | |
/ \ | / \ | \ / | |
/ \ | / \ | | | |===========
A A
AAAAAAAA AAA AAAA A A A A A A
A A A A A A A A A A A A A
A A AA A A A A A A A A A
A A A AA A A A A A A A
A AAA A A AAA AAA AAAAA
=============================================================================
*/
#include<bits/stdc++.h>
#define pb push_back
#define pf push_front
#define mp make_pair
#define F first
#define S second
#define pq priority_queue
#define ll long long int
#define pii pair<int,int>
#define endl '\n'
#define Orz ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define MAXN 200001
using namespace std;
//YeedragOrz
//8e7Orz
//jassOrz
//FHvirusOrz
//samOrz
//yungyaoOrz
//littlecubeOrz
//2qbingxuanOrz
//FoodSheepOrz
//ck_platypusOrz
//koyingOrz
//foxyyOrz
//peiganOrz
//jikuaiOrz){
int umax[MAXN]={},vis[MAXN]={};
pii dmax[MAXN]={};
vector<int> dis[MAXN];
void dfs(int pos){
vis[pos]=1;
int ans=0;
for(auto i:dis[pos]){
if(vis[i]==0){
dfs(i);
ans=dmax[i].F+1;
if(ans>dmax[pos].F){
dmax[pos].S=dmax[pos].F;
dmax[pos].F=ans;
}else if(ans>dmax[pos].S){
dmax[pos].S=ans;
}
}
}
return;
}
void ddfs(int pos){
vis[pos]=1;
for(auto i:dis[pos]){
if(vis[i]==0){
umax[i]=max(umax[pos]+1,umax[i]);
if(dmax[i].F+1==dmax[pos].F){
umax[i]=max(umax[i],dmax[pos].S+1);
}else{
umax[i]=max(umax[i],dmax[pos].F+1);
}
ddfs(i);
}
}
}
int main(){
int n;cin>>n;
for(int i=1;i<n;i++){
int a,b;cin>>a>>b;
dis[a].pb(b);
dis[b].pb(a);
}
dfs(1);
for(int i=1;i<=n;i++)vis[i]=0;
ddfs(1);
//for(int i=1;i<=n;i++)cout<<umax[i]<<" ";cout<<endl;
//for(int i=1;i<=n;i++)cout<<dmax[i].F<<" ";cout<<endl;
for(int i=1;i<n;i++)cout<<max(umax[i],dmax[i].F)<<" ";
cout<<max(umax[n],dmax[n].F)<<endl;
return 0 ;
}