while x != self.parent[x]:
self.parent[x] = self.parent[self.parent[x]];
if self.connected(p, q): return
if self.size[leader_p] < self.size[leader_q]:
self.parent[leader_p] = leader_q
self.size[leader_p] += self.size[leader_q]
self.parent[leader_q] = leader_p
self.size[leader_q] += self.size[leader_p]
def connected(self, p, q):
return self.find(p) == self.find(q)
def distanceLimitedPathsExist(self, n: int, edgeList: List[List[int]], queries: List[List[int]]) -> List[bool]:
edgeList.sort(key=lambda a:a[2])
queries = [(fr, to, w, i) for i, [fr, to, w] in enumerate(queries)]
queries.sort(key=lambda a:a[2])
for fr, to, w, i in queries:
while j < len(edgeList) and edgeList[j][2] < w:
uf.union(edgeList[j][0], edgeList[j][1])
if uf.connected(fr, to): ans[i] = True