题意:
n(2000)个点的图 给出它的最短路矩阵 用n条边构造出满足最短路矩阵的图 保证图连通且解存在
思路:
我们可以先保证图连通 那么需要n-1条边 联想到是不是最小生成树??
可以这样想 假设abc点已经连通 现在考虑再加入到连通块中一个点比如d 如果d-b的距离是d到abc三个点中最短的 那么这条边一定要被选 因为如果不选d-b 假设选了d-a 那么d-a已经长于d-b了 所以d-b的距离将不永远得不到满足
这样我们就可以根据最小生成树选出n-1条边了 还差一条 这时我们想知道最短路矩阵是否已经满足了 如果满足 随便加一条重边就好了 (这里可以利用dfs来算出n-1条边时的最短路矩阵 因为Floyd要n^3)
如果不行 我们加哪条边呢?? 很容易想到用新矩阵和原矩阵比较 差异最小的那条边就是要加的 证明和上面差不多 如果不加最小的 就算加了次小的 那么最小的也得不到满足
代码:
#include
#include
#include
#include
#include
#include