奶牛政坛
时间限制:1秒 内存限制:256M
【题目描述】
农夫约翰的奶牛住在 \(N\) 片不同的草地上,标号为 1 到 \(N\)。恰好有 \(N-1\) 条单位长度的双向道路,用各种各样的方法连接这些草地。而且从每片草地出发都可以抵达其他所有草地。也就是说,这些草地和道路构成了一种叫做树的图。输入包含一个详细的草地的集合,详细说明了每个草地的父节点 \(P_i\),根节点的 \(P_i = 0\), 表示它没有父节点。因为奶牛建立了 1 到 \(K\) 一共 \(K (1 ≤ K ≤ N/2)\) 个政党。每只奶牛都要加入某一个政党,其中,第 \(i\) 只奶牛属于第 \(A_i\) 个政党。而且每个政党至少有两只奶牛。
这些政党互相吵闹争。每个政党都想知道自己的“范围”有多大。其中,定义一个政党的范围是这个政党离得最远的两只奶牛(沿着双向道路行走)的距离。帮助奶牛们求出每个政党的范围。
【输入格式】
第 1 行: 两个由空格隔开的整数: \(N\) 和 \(K\)。
第 2 到第 \(N+1\) 行: 第 \(i+1\) 行包含两个由空格隔开的整数: \(A_i\) 和 \(P_i\)。
【输出格式】
第 1 到第 \(K\) 行: 第 \(i\) 行包含一个单独的整数,表示第 \(i\) 个政党的范围。
【输入输出样例】
Input
6 2
1 3
2 1
1 0
2 1
2 1
1 5
Output
3
2
【数据限制】。
对于 \(100\%\) 的数据,\(1≤N≤200000\)。
【来源】
Mr.he