var closestMeetingNode = function (edges, node1, node2) {
const n = edges.length
const map1 = Array(n).fill(-1)
const map2 = Array(n).fill(-1)
const dfs = (start, dist) => {
let curr = start
let d = 0
while (curr !== -1 && dist[curr] === -1) {
dist[curr] = d++
curr = edges[curr]
}
}
dfs(node1, map1)
dfs(node2, map2)
let result = -1
let minDist = Infinity
for (let i = 0; i < n; i++) {
if (map1[i] !== -1 && map2[i] !== -1) {
const maxDist = Math.max(map1[i], map2[i])
if (maxDist < minDist || (maxDist === minDist && i < result)) {
minDist = maxDist
result = i
}
}
}
return result
}
console.log(closestMeetingNode([2, 2, 3, -1], 0, 1))