#include "towns.h"
#include <algorithm>
#include <limits>
#include <vector>
int hubDistance(int N, int) {
std::vector<int> distances_from_0(N);
for (int i = 1; i < N; i++) {
distances_from_0[i] = getDistance(0, i);
}
int u = std::max_element(distances_from_0.begin(), distances_from_0.end()) -
distances_from_0.begin();
std::vector<int> distances_from_u(N);
distances_from_u[0] = distances_from_0[u];
for (int i = 1; i < N; i++) {
if (i == u)
continue;
distances_from_u[i] = getDistance(u, i);
}
int v = std::max_element(distances_from_u.begin(), distances_from_u.end()) -
distances_from_u.begin();
int diameter = distances_from_u[v];
// y = connection point from [i] to 0u path.
std::vector<int> distance_y_to_u(N);
for (int i = 0; i < N; i++) {
distance_y_to_u[i] =
(distances_from_u[i] + distances_from_0[u] - distances_from_0[i]) / 2;
}
int radius = std::numeric_limits<int>::max();
for (int i = 0; i < N; i++) {
// if both on 0u and vu path
if (distance_y_to_u[i] <= distance_y_to_u[v]) {
int r = std::max(distance_y_to_u[i], diameter - distance_y_to_u[i]);
if (r < radius)
radius = r;
}
}
return radius;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |