結果
問題 | No.94 圏外です。(EASY) |
ユーザー |
![]() |
提出日時 | 2016-03-09 13:19:40 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 741 ms / 5,000 ms |
コード長 | 1,732 bytes |
コンパイル時間 | 255 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 11,136 KB |
最終ジャッジ日時 | 2024-06-26 07:53:16 |
合計ジャッジ時間 | 7,310 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 22 |
ソースコード
#!/usr/bin/env python3# -*- coding: utf-8 -*-import arrayimport collectionsimport itertoolsEPS = 10 ** (-9)Station = collections.namedtuple("Station", "index coordinate")class UnionFind(object):def __init__(self, number_of_nodes):self.par = array.array("L", range(number_of_nodes))self.rank = array.array("L", (0 for i in range(number_of_nodes)))def root(self, node):if self.par[node] == node:return nodeelse:r = self.root(self.par[node])self.par[node] = rreturn rdef in_the_same_set(self, node1, node2):return self.root(node1) == self.root(node2)def unite(self, node1, node2):x = self.root(node1)y = self.root(node2)if x == y:passelif self.rank[x] < self.rank[y]:self.par[x] = yelse:self.par[y] = xif self.rank[x] == self.rank[y]:self.rank[x] += 1def main():n = int(input())if n == 0:print("{:.12f}".format(1.0))returnelif n == 1:print("{:.12f}".format(2.0))returnstations = [Station(i, complex(*map(int, input().split())))for i in range(n)]uf = UnionFind(n)for st1, st2 in itertools.combinations(stations, 2):if abs(st1.coordinate - st2.coordinate) < 10.0 + EPS:uf.unite(st1.index, st2.index)answer = 2.0for st1, st2 in itertools.combinations(stations, 2):if uf.in_the_same_set(st1.index, st2.index):answer = max(answer, 2.0 + abs(st1.coordinate - st2.coordinate))print("{:.12f}".format(answer))if __name__ == '__main__':main()