結果
問題 | No.94 圏外です。(EASY) |
ユーザー |
![]() |
提出日時 | 2015-03-26 00:00:50 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 6 ms / 5,000 ms |
コード長 | 1,850 bytes |
コンパイル時間 | 1,500 ms |
コンパイル使用メモリ | 165,748 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-06-26 07:30:06 |
合計ジャッジ時間 | 2,238 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 22 |
ソースコード
#include <bits/stdc++.h>#define REP(i, x, n) for(int i = x; i < (int)(n); i++)#define rep(i, n) REP(i, 0, n)#define all(x) (x).begin(), (x).end()#define rall(x) (x).rbegin(), (x).rend()#define F first#define S second#define mp make_pairusing namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair<int, int> P;class UnionFindTree {private:int nodeSize;vector<int> parent;vector<int> rank;vector<int> treeSize;public:UnionFindTree(int ns) {nodeSize = ns;parent = vector<int>(nodeSize);rank = vector<int>(nodeSize, 0);treeSize = vector<int>(nodeSize, 1);for(int i = 0; i < nodeSize; i++) {parent[i] = i;}}~UnionFindTree() {}int find(int x) {if(parent[x] == x) {return x;}else {return parent[x] = find(parent[x]);}}bool unite(int x, int y) {x = find(x);y = find(y);if(x == y) {return false;}if(rank[x] < rank[y]) {parent[x] = y;treeSize[y] += treeSize[x];}else {parent[y] = x;treeSize[x] += treeSize[y];if(rank[x] == rank[y]) {rank[x]++;}}return true;}bool same(int x, int y) {return find(x) == find(y);}int getSize(int x) {return treeSize[find(x)];}};int main() {// ios_base::sync_with_stdio(false);int N;cin >> N;vector<double> X(N), Y(N);rep(i, N) cin >> X[i] >> Y[i];UnionFindTree uf(N);rep(i, N) REP(j, i + 1, N) {if(pow(X[i] - X[j], 2) + pow(Y[i] - Y[j], 2) <= 100) {uf.unite(i, j);}}double ans = 2;rep(i, N) REP(j, i + 1, N) {if(uf.same(i, j)) {ans = max(ans, sqrt(pow(X[i] - X[j], 2) + pow(Y[i] - Y[j], 2)) + 2);}}if(N == 0) ans = 1;printf("%.10f\n", ans);return 0;}