#P5565. 奶牛健美操

奶牛健美操

题目描述

FJ{FJ}为了保持奶牛们的健康,让可怜的奶牛们不停在牧场之间的小路上奔跑。这些奶牛的路径集合可以被表示成一个点集和一些连接 两个顶点的双向路,使得每对点之间恰好有一条简单路径。

简单的说来, 这些点的布局就是一棵树,且每条边等长,都为1{1}。 对于给定的一个奶牛路径集合,精明的奶牛们会计算出任意点对路径的最大值, 我们称之为这个路径集合的直径。如果直径太大,奶牛们就会拒绝锻炼。

FJ{FJ}把每个点标记为1..V(2<=V<=100,000){1..V (2 <= V <= 100,000)}。为了获得更加短的直径,他可以选择封锁一些已经存在的道路,这样就可以得到更多的路径集合, 从而减小一些路径集合的直径。 我们从一棵树开始,FJ{FJ}可以选择封锁S(1<=S<=V1){S (1 <= S <= V-1)}条双向路,从而获得 S+1{S+1}个路径集合。

你要做的是计算出最佳的封锁方案,使得他得到的所有路径集合 直径的最大值旧能小。

FJ{FJ}告诉你所有V1{V-1}条双向道路,每条表述为:顶点Ai(1<=Ai<=V){A_i (1 <= A_i <= V) }Bi(1<=Bi<=V{B_i (1 <= B_i <= V}; Ai!=Bi){A_i!= B_i)}连接。

我们来看看如下的例子:

线性的路径集合7{7}个顶点的树1234567{ 1---2---3---4---5---6---7 }如果FJ{FJ}可以封锁两条道路,他可能的选择如下: 1234567{1---2 | 3---4 | 5---6---7 }这样最长的直径是2{2,}即是最优答案({(}当然不是唯一的){)}

输入格式

1{1}行: 两个空格分隔的整数V{V}S{S }

2...V{2...V}行: 两个空格分隔的整数Ai{A_i}Bi{B_i}

输出格式

1{1}行:一个整数,表示FJ{FJ}可以获得的最大的直径。

样例

输入样例

7 2
6 7
3 4
6 5
1 2
3 2
4 5

输出样例

2