/* -*- coding: utf-8 -*- * * 94.cc: No.94 圏外です。(EASY) - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_N = 1000; /* typedef */ typedef vector vi; typedef queue qi; /* global variables */ int xs[MAX_N], ys[MAX_N]; vi nbrs[MAX_N]; bool used[MAX_N]; /* subroutines */ /* main */ int main() { int n; cin >> n; for (int i = 0; i < n; i++) cin >> xs[i] >> ys[i]; for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) { int dx = xs[j] - xs[i], dy = ys[j] - ys[i]; if (dx * dx + dy * dy <= 10 * 10) { nbrs[i].push_back(j); nbrs[j].push_back(i); } } if (n == 0) { printf("%.9lf\n", 1.0); return 0; } int maxd2 = 0; for (int i = 0; i < n; i++) if (! used[i]) { used[i] = true; qi q; q.push(i); vi ps; ps.push_back(i); while (! q.empty()) { int u = q.front(); q.pop(); vi &nbru = nbrs[u]; for (vi::iterator vit = nbru.begin(); vit != nbru.end(); vit++) { int &v = *vit; if (! used[v]) { used[v] = true; q.push(v); ps.push_back(v); } } } int pn = ps.size(); for (int j = 0; j < pn; j++) { int xj = xs[ps[j]], yj = ys[ps[j]]; for (int k = j + 1; k < pn; k++) { int xk = xs[ps[k]], yk = ys[ps[k]]; int dx = xk - xj, dy = yk - yj; int d2 = dx * dx + dy * dy; if (maxd2 < d2) maxd2 = d2; } } } printf("%.9lf\n", sqrt((double)maxd2) + 2.0); return 0; }