Submission #1152331

#TimeUsernameProblemLanguageResultExecution timeMemory
1152331jmuzhenOdašiljači (COCI20_odasiljaci)C++20
70 / 70
202 ms440 KiB
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

#define double long double
using ii = pair<int, int>;
vector<ii> points, pointsy;

inline double dist(ii a, ii b) {
    return sqrt(pow(a.first - b.first, 2.0) + pow(a.second - b.second, 2.0));
}

constexpr double INF = 1e12;
constexpr double EPSILON = pow(10, -7);
const int N=100013;
int n, m;
int g[N];

int find(int x)
{
    if (g[x]==x) return x;
    else return g[x]=find(g[x]);
}
void unite(int x, int y)
{
    x=find(x); y=find(y);
    if (x==y) return;
    g[y]=x;
}

void init() {
    for (int i=0; i<n; i++) g[i]=i;
}

signed main() {
    cin >> n;

    for (signed i = 0; i < n; i++) {
        int x, y; cin >> x >> y;
        points.push_back({x, y});
    }

    // sort by increasing x
    sort(points.begin(), points.end(), [](const ii&a, const ii&b)
    {
        return a.first<b.first;
    });

    // binary search
    double l = 0, r = INF;
    while (r-l>EPSILON) {
        double mid = (l+r)/2;
        // init ufds
        init();

        for (signed i = 0; i < n; i++) {
            auto p1 = points[i];
            for (signed j = 0; j < n; j++) {
                if (i==j) continue;
                if (find(i) == find(j)) continue;
                auto p2 = points[j];
                double d = dist(p1, p2);
                if (mid*2>=d) {
                    // ok
                    unite(i,j);
                }
                else {
                    // nothing
                }
            }
        }

        // then check if everyones in the same component
        int c = find(0);
        bool ok = true;
        for (int i = 0; i < n; i++) {
            if (find(i) != c) {
                ok = false; break;
            }
        }

        if (ok) {
            // can reduce
            r = mid;
        }
        else {
            // must increase
            l = mid;
        }
    }

    // answer is l
    cout << setprecision(7) << l << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...