Skip to content

Commit 834ca6a

Browse files
committed
Time: 407 ms (28.96%) | Memory: 52.5 MB (38.46%) - LeetSync
1 parent 0068cfe commit 834ca6a

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
class Solution:
2+
def closestMeetingNode(self, edges: List[int], node1: int, node2: int) -> int:
3+
n = len(edges)
4+
5+
graph = defaultdict(list)
6+
for u, v in enumerate(edges):
7+
if v == -1:
8+
continue
9+
graph[u].append(v)
10+
11+
dist_to_node1 = [-1] * n
12+
queue = deque( [(node1, 0)])
13+
14+
while queue:
15+
node, dist = queue.popleft()
16+
if dist_to_node1[node] == -1:
17+
dist_to_node1[node] = dist
18+
for nei in graph[node]:
19+
queue.append((nei, dist + 1))
20+
21+
dist_to_node2 = [-1] * n
22+
queue = deque([(node2, 0)])
23+
24+
while queue:
25+
node, dist = queue.popleft()
26+
if dist_to_node2[node] == -1:
27+
dist_to_node2[node] = dist
28+
for nei in graph[node]:
29+
queue.append((nei, dist + 1))
30+
31+
min_dist = n
32+
min_node = -1
33+
34+
for node in range(n):
35+
if dist_to_node1[node] == -1 or dist_to_node2[node] == -1:
36+
continue
37+
if min_dist > max(dist_to_node1[node], dist_to_node2[node]):
38+
min_dist = max(dist_to_node1[node], dist_to_node2[node])
39+
min_node = node
40+
41+
return min_node
42+

0 commit comments

Comments
 (0)