結果
問題 | No.94 圏外です。(EASY) |
ユーザー |
![]() |
提出日時 | 2020-02-06 00:29:17 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 7 ms / 5,000 ms |
コード長 | 1,818 bytes |
コンパイル時間 | 2,295 ms |
コンパイル使用メモリ | 195,992 KB |
最終ジャッジ日時 | 2025-01-08 22:26:17 |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 22 |
ソースコード
#include <bits/stdc++.h>using namespace std;using ll = long long;using PII = std::pair<int, int>;using PLL = std::pair<ll, ll>;#define rep(i, n) for (int i = 0; i < (int)(n); i++)#define rep2(i, s, n) for (int i = (s); i < (int)(n); i++)struct point{int x;int y;};class Unionfind{vector<int> p;public:int find(int x);void unite(int x, int y);Unionfind(int n);};Unionfind::Unionfind(int n){for (int i = 0; i < n; i++){p.push_back(i);}}int Unionfind::find(int x){while (p[x] != x){p[x] = p[p[x]];x = p[x];}return x;}void Unionfind::unite(int x, int y){x = Unionfind::find(x);y = Unionfind::find(y);if (x != y){p[x] = y;}}int main(){#ifdef DEBUGcout << "DEBUG MODE" << endl;ifstream in("input.txt"); //for debugcin.rdbuf(in.rdbuf()); //for debug#endifint n, x, y, d, maxdist;cin >> n;double maxdist2;Unionfind tower(n);point towerxy[n];rep(i, n){cin >> x >> y;towerxy[i].x = x;towerxy[i].y = y;}rep(i, n - 1){rep2(j, i + 1, n){d = pow(towerxy[i].x - towerxy[j].x, 2) + pow(towerxy[i].y - towerxy[j].y, 2);if (d <= 100)tower.unite(i, j);}}maxdist = 0;rep(i, n - 1){rep2(j, i + 1, n){if (tower.find(i) == tower.find(j)){d = pow(towerxy[i].x - towerxy[j].x, 2) + pow(towerxy[i].y - towerxy[j].y, 2);maxdist = max(maxdist, d);}}}if (n == 0){cout << 1 << endl;}else{printf( "%.8f\n", sqrt(1.0 * maxdist) + 2.0 );}return 0;}