제출 #342338

#제출 시각아이디문제언어결과실행 시간메모리
342338limabeansOdašiljači (COCI20_odasiljaci)C++17
70 / 70
414 ms492 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

template<typename T>
void out(T x) { cout << x << endl; exit(0); }

const int maxn = 1010;




struct dsu {
    vector<int> par, siz;
    int n;
    int cc;
    void init(int _n) {
        n=_n;
        cc=n;
        par.resize(n);
        siz.resize(n,1);
        iota(par.begin(),par.end(),0);
    }
    int parent(int x) {
        return x==par[x]?x:par[x]=parent(par[x]);
    }
    void join(int u, int v) {
        u = parent(u);
        v = parent(v);
        if (u==v) return;
        if (siz[u]<siz[v]) swap(u,v);
        par[v]=u;
        siz[u]+=siz[v];
        cc--;
    }
};

int n;
ll x[maxn], y[maxn];


double sq(double a) {
    return a*a;
}

double dist(int i, int j) {
    return sqrt(sq(x[i]-x[j]) + sq(y[i]-y[j]));
}

bool test(double r) {
    dsu dsu;
    dsu.init(n);
    for (int i=0; i<n; i++) {
        for (int j=i+1; j<n; j++) {
            if (dist(i,j) <= 2.0*r) {
                dsu.join(i,j);
            }
        }
    }

    return dsu.cc==1;
}

int main() {

    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    cin>>n;
    for (int i=0; i<n; i++) {
        cin>>x[i]>>y[i];
    }

    double lo = 0;
    double hi = 1e12;
    for (int iter=0; iter<100; iter++) {
        double mid = (lo+hi)/2;
        if (test(mid)) {
            hi = mid;
        } else {
            lo = mid;
        }
    }

    cout<<fixed<<setprecision(15)<<hi<<endl;
    
    
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...