結果
問題 | No.168 ものさし |
ユーザー |
|
提出日時 | 2020-10-02 11:09:26 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,198 ms / 2,000 ms |
コード長 | 1,394 bytes |
コンパイル時間 | 441 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 156,972 KB |
最終ジャッジ日時 | 2024-07-08 04:04:25 |
合計ジャッジ時間 | 10,716 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 19 |
ソースコード
class UnionFind:def __init__(self):self.N = 0self.parent = []self.rank = []def __init__(self, NN):self.N = NN + 1self.parent = [i for i in range(self.N)]self.rank = [0]*self.Ndef root(self, aa):if self.parent[aa] == aa:return aaself.parent[aa] = self.root(self.parent[aa])return self.parent[aa]def sameroot(self, aa, bb):return self.root(aa) == self.root(bb)def unite(self, aa, bb):aa = self.root(aa)bb = self.root(bb)if aa == bb: #no need to unite anymorereturnif self.rank[aa] < self.rank[bb]:aa, bb = bb, aaif self.rank[aa] == self.rank[bb]:self.rank[aa] += 1self.parent[bb] = aaN = int(input())point = []dist = []for i in range(N):x, y = map(int, input().split())point.append((x, y))for k in range(i):xk, yk = point[k]dd = (xk-x)*(xk-x) + (yk-y)*(yk-y)dist.append((dd, i, k))#sorted from short to longsortedD = sorted(dist, key=lambda tup: tup[0])cnt = 0tree = UnionFind(N)for (d, i, k) in sortedD:tree.unite(i, k)#connected? and be the shortest pathif tree.sameroot(0, N-1):dd = int(d**0.5)while dd*dd < d:dd += 1print(((dd + 9)//10)*10)exit(0)