답안 #332046

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
332046 2020-12-01T09:19:05 Z dolphingarlic Odašiljači (COCI20_odasiljaci) C++14
70 / 70
88 ms 8672 KB
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;

pair<int, int> p[1000];
vector<tuple<double, int, int>> edges;
int n, cmp[1000];

int find(int A) {
    while (cmp[A] != A) cmp[A] = cmp[cmp[A]], A = cmp[A];
    return A;
}

void onion(int A, int B) {
    if (find(A) != find(B)) n--;
    cmp[find(A)] = find(B);
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> p[i].first >> p[i].second;
        for (int j = 0; j < i; j++) {
            edges.push_back({hypot(p[i].first - p[j].first, p[i].second - p[j].second), i, j});
        }
    }
    sort(edges.begin(), edges.end());
    iota(cmp, cmp + n, 0);
    for (tuple<double, int, int> i : edges) {
        double cost;
        int a, b;
        tie(cost, a, b) = i;
        onion(a, b);
        if (n == 1) return cout << fixed << setprecision(8) << cost / 2, 0;
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 1 ms 492 KB Output is correct
5 Correct 1 ms 492 KB Output is correct
6 Correct 27 ms 2536 KB Output is correct
7 Correct 23 ms 2536 KB Output is correct
8 Correct 56 ms 8672 KB Output is correct
9 Correct 88 ms 8672 KB Output is correct
10 Correct 86 ms 8672 KB Output is correct