제출 #1141485

#제출 시각아이디문제언어결과실행 시간메모리
1141485aarb_.tomatexd도시들 (IOI15_towns)C++20
0 / 100
8 ms328 KiB
#include "towns.h"
#include <bits/stdc++.h>
#define ll long long 
#define SZ(x) ((int)(x).size())
using namespace std;
int hubDistance(int N, int sub) {
    int farthest = 1, maxDist = 0;
    for (int i = 2; i <= N; i++) {
        int d = getDistance(1, i);
        if (d > maxDist) {
            maxDist = d;
            farthest = i;
        }
    }
    int diamStart = farthest;
    maxDist = 0;
    for (int i = 1; i <= N; i++) {
        if (i == diamStart) continue;
        int d = getDistance(diamStart, i);
        if (d > maxDist) {
            maxDist = d;
            farthest = i;
        }
    }
    int diamEnd = farthest;
    vector<pair<int, int>> nodes;
    for (int i = 1; i <= N; i++) {
        nodes.push_back({getDistance(diamStart, i), i});
    }
    sort(nodes.begin(), nodes.end());
    int hub = nodes[maxDist / 2].second;
    if (sub == 1 || sub == 2) return maxDist;
    
    vector<int> distances;
    for (int i = 1; i <= N; i++) {
        if (i != hub) distances.push_back(getDistance(hub, i));
    }
    sort(distances.begin(), distances.end());
    int maxGroupSize = (N - 1) / 2;
    if (distances[N - 2] <= maxGroupSize) return maxDist;
    return -1; 
}
#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...