很少发题解,但是这是自己切掉的第一个final题目,小小成就感。
题目解法很多,经典的Voronoi图,但是比较麻烦。
抽象后即为求两点之间的最短路,用floyd算法预处理即可。关键是求给定路径长度(两个城市间最少中转信号站的个数),可以确定,当离a, b两个城市距离最近的信号站为一个时,距离 d(a, b) 为零,如果不为零,两城市之间的路径长度为:d(a, b) = d(a, c) + d(c, b) [ c 为a,b的中点 ],不断二分,直到两个坐标所属信号站相同——说明距离为零——或者 两个坐标的距离小于eps(一个精度,去1e-6足以)——距离为1。
代码:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const