Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
151134 蒋沛霖 牛的旅行 C++ 通过 100 7 MS 472 KB 2098 2024-06-12 13:08:35

Tests(9/9):


#include <bits/stdc++.h> using namespace std; struct Point { double x, y; }; const double INF = 0x7ffffff; int vertexNum, edgeNum; vector<Point> p(155); vector<double> radius(155); vector<vector<double> > dis(155, vector<double>(155, INF)); inline double calculateDistence(int from, int to) { double xGap = p[from].x - p[to].x; double yGap = p[from].y - p[to].y; return sqrt(xGap * xGap + yGap * yGap); } void Floyed() { for (int k = 1; k <= vertexNum; ++k) { for (int i = 1; i <= vertexNum; ++i) { for (int j = 1; j <= vertexNum; ++j) { if (dis[i][j] > dis[i][k] + dis[k][j]) dis[i][j] = dis[i][k] + dis[k][j]; } } } } double solve() { Floyed(); for (int i = 1; i <= vertexNum; ++i) { for (int j = 1; j <= vertexNum; ++j) { if (dis[i][j] != INF && radius[i] < dis[i][j]) { radius[i] = dis[i][j]; } } } double bridge = INF; for (int i = 1; i <= vertexNum; ++i) { for (int j = 1; j <= vertexNum; ++j) { if (dis[i][j] == INF) { double tmp = calculateDistence(i, j); bridge = min(bridge, radius[i] + radius[j] + tmp); } } } double res = 0; for (int i = 1; i <= vertexNum; ++i) res = max(res, radius[i]); return max(res, bridge); } int main() { std::ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> vertexNum; for (int i = 1; i <= vertexNum; ++i) cin >> p[i].x >> p[i].y; string line; for (int i = 1; i <= vertexNum; ++i) { cin >> line; int len = line.size(); for (int j = 0; j < len; ++j) { if (line[j] == '1') { dis[i][j + 1] = dis[j + 1][i] = calculateDistence(i, j + 1); } } dis[i][i] = 0; } double res = solve(); cout << fixed << setprecision(6) << res << endl; return 0; }


测评信息: