奶牛健美操

【题目描述】

农夫让奶牛们在牧场之间奔跑以保持健康。这些牧场的布局是一棵树,且每条边等长度都为1。

对于给定的一个路径集合,精明的奶牛们会计算出任意点对路径的最大值,我们称之为这个路径集合的直径。

农夫把每个点标记为1~V(2 <= V <= 100000)。为了获得更加短的直径,他可以选择封锁一些已经存在的道路,这样就可以得到更多的路径集合,从而减小一些路径集合的直径。

我们从一棵树开始,农夫可以选择封锁S(1 <= S < V)条双向路,从而获得S+1个路径集合。现要求计算出最佳的封锁方案,使得他得到的所有路径集合直径的最大值尽可能小。

农夫会告诉你所有的(V-1条)双向道路,每条道路表述为:顶点Ai(1 <= Ai <= V)和Bi(1 <= Bi <= V,Ai ≠ Bi)连接。

我们来看看如下的例子:

线性的路径集合(7个顶点的树)

1

 

  2

  

     3

     

       4

       

         5

          

            6

           

              7

如果农夫可以封锁两条道路,他可能的选择如下:

1

 

  2

   X

     3

     

       4

        X

         5

          

           6

           

             7

这样最长的直径是2,即是最优答案(当然,不是唯一的)。

【输入描述】

第1行输入两个整数V和S;

第2~V行,每行输入两个整数Ai和Bi

【输出描述】

输出一个整数,表示农夫可以获得的最大直径。

【样例输入】

7 2

6 7

3 4

6 5

1 2

3 2

4 5

【样例输出】

2

【数据范围及提示】

对于50%的数据,V <= 100;

对于100%的数据,V <= 100000。

原文地址:https://www.cnblogs.com/Ackermann/p/5904862.html