51Nod-1366 贫富差距

贫富差距

题目来源: TopCoder
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
一个国家有N个公民,标记为0,1,2,…,N-1,每个公民有一个存款额。已知每个公民有一些朋友,同时国家有一条规定朋友间的存款额之差不能大于d。也就是说,a和b是朋友的话,a有x元的存款,b有y元,那么|x-y|<=d。给定d值与N个人的朋友关系,求这个国家最富有的人和最贫穷的人的存款相差最大的可能值是多少?即求贫富差距的最大值的下界。若这个值为无穷大,输出-1.

Input

Output

Input示例

Output示例


题意可转化为求一有向图中相聚最远的点之间的距离,显然,当图不连通时贫富差距的值可以为无穷大。

枚举每一点作为起点,以该点为起点dfs或bfs找出距离其最远的点,记录距离。

对于枚举的每个起点得到的距离取其中的最大值,得到的结果乘以d即是题目所求的贫富差距最大值。

需要注意的是,图的直径不能以求树的直径的方法(两次dfs或bfs,第一次求出起点,第二次以起点得出直径)做,存在如

1-2

1-3

1-4

2-3

3-4

这样的反例,第一次搜索找到的起点可为2,3,4中的任意一点,当以3为第二次搜索的起点时得到的最终的直径为1,而该例子显然直径应为2.

 

发表评论