Baldr Sky
题号:NC19488
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

在一个时间点做出的不同行动,会导致世界在下一刻分裂成不同的分支。每个时刻的世界一起构成了一棵世界树。树是一个无环的无向连通图。世界往往被一些不经意的行动改变,因此可以认为世界树是一棵随机生成的树。
世界树的随机方式是这样的:
一开始只有一个1号点,之后按照点的编号从小到大加入每个点,加入点i时,从点1,2,...,i-1中随机选一个点,将其与点i连边。
给定一棵n个点的树,求去掉0,1,...,n-1个点之后(需要保证剩余的点仍然构成一棵树),树的直径最短为多少。

输入描述:

第一行一个整数n(1 ≤ n ≤ 100000)。
第二行至第n行,每行两个整数a,b(1 ≤ a,b ≤ n),表示a,b有一条边。
保证数据是按照题目描述的方式生成的一棵树。

输出描述:

一行n个数,分别表示去掉0,1,...,n-1个点之后的最短直径。
示例1

输入

复制
10
1 2
1 3
2 4
1 5
2 6
2 7
5 8
4 9
3 10

输出

复制
5 4 4 3 3 2 2 2 1 0