这道题需要用到Floyd最短路径算法来求每对点之间的最短路径。

定义一个概念----半径。在求出每对点之间的最短路径后,用radius[i]来表示所有i可达的点j中,i到j的最短路径最大值。

当我们在A片区(一些互相可达的点组成一个片区)中的点a与B片区中的点b之间修一条路后,这个新片区的直径就是以下三个值的和:

1、a点的半径。

2、b点的半径。

3、这条新路的长度,即a与b在坐标系上的距离。

那么尝试在所有不可达的两个点之间修路就可以得到所有新片区的直径。

注意有一种情况,如在a、b中修路后,得到的新片区直径为d,但是它可能小于另一个片区C的半径,因此要在所有直径与半径中取出最大值才是题目所求。



Code
posted on 2008-12-24 15:22  刘永辉  阅读(672)  评论(0编辑  收藏  举报