• 奶牛健美操


    【题目描述】

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

  • 相关阅读:
    国外可用的谷歌地图(可根据地址搜索经纬度)
    后台css框架(自用)
    DBHelp类sql分页(自用笔记)
    定制C++高效安全的运行时动态类型转换
    C++11右值引用和std::move语句实例解析
    浏览器内核-Webkit
    获取股票历史数据和当前数据的API
    从浏览器启动应用程序
    一个实时获取股票数据的安卓应用程序
    C++数据类型总结
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5904862.html
Copyright © 2020-2023  润新知