結果
問題 | No.168 ものさし |
ユーザー |
![]() |
提出日時 | 2024-09-20 09:28:18 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,210 ms / 2,000 ms |
コード長 | 1,297 bytes |
コンパイル時間 | 237 ms |
コンパイル使用メモリ | 81,916 KB |
実行使用メモリ | 79,872 KB |
最終ジャッジ日時 | 2024-09-20 09:28:31 |
合計ジャッジ時間 | 11,491 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 19 |
ソースコード
class UnionFind:def __init__(self,n):self.n=nself.parent=[-1]*ndef root(self,x):if self.parent[x]<0:return xself.parent[x]=self.root(self.parent[x])return self.parent[x]def merge(self,x,y):x,y=self.root(x),self.root(y)if x==y:returnif -self.parent[x]<-self.parent[y]:x,y=y,xself.parent[x]+=self.parent[y]self.parent[y]=xdef same(self,x,y):return self.root(x)==self.root(y)def size(self,x):return -self.parent[self.root(x)]def groups(self):members=[[] for _ in range(self.n)]for v in range(self.n):members[self.root(v)].append(v)res=[]for member in members:if member:res.append(member)return resn=int(input())xy=[list(map(int,input().split())) for _ in range(n)]def dist(a,b):return abs(a[0]-b[0])**2+abs(a[1]-b[1])**2def check(x):uf=UnionFind(n)for i in range(n-1):for j in range(i+1,n):if dist(xy[i],xy[j])<=x**2:uf.merge(i,j)return uf.same(0,n-1)ng,ok=-1,10**9while ok-ng>1:mid=(ok+ng)//2if check(10*mid):ok=midelse:ng=midprint(10*ok)