4
public boolean[] distanceLimitedPathsExist(int n, int[][] edgeList, int[][] queries) {5
this.parents = new int[n];6
for (int i = 0; i < n; i++) parents[i] = i;8
int m = queries.length;10
// storing {u, v, weight, original idx} by increasing weight11
int[][] sortedQueries = new int[m][4];12
for (int i = 0; i < m; i++) {13
sortedQueries[i] = new int[] {queries[i][0], queries[i][1], queries[i][2], i};15
Arrays.sort(sortedQueries, (a, b) -> a[2] - b[2]);17
// sort edgeList by increasing weight18
Arrays.sort(edgeList, (a, b) -> a[2] - b[2]);21
boolean[] res = new boolean[m];23
for (int i = 0; i < m; i++) {24
int[] q = sortedQueries[i];27
// union all edges with weight less than current query28
while (idx < edgeList.length && edgeList[idx][2] < w) {29
int[] e = edgeList[idx++];30
int u = e[0], v = e[1];34
int uQuery = q[0], vQuery = q[1], id = q[3];35
res[id] = (find(uQuery) == find(vQuery));41
private void union(int u, int v) {42
int uParent = find(u);43
int vParent = find(v);44
parents[uParent] = vParent;47
private int find(int u) {48
while (u != parents[u]) {49
parents[u] = parents[parents[u]];