标签:
【题目描述】
农夫让奶牛们在牧场之间奔跑以保持健康。这些牧场的布局是一棵树,且每条边等长度都为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。
标签:
原文地址:http://www.cnblogs.com/Ackermann/p/5904862.html