Submission #1266073

#TimeUsernameProblemLanguageResultExecution timeMemory
1266073veluca93Towns (IOI15_towns)C++20
25 / 100
9 ms328 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...