-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtask_2359.py
More file actions
45 lines (35 loc) · 1.26 KB
/
Copy pathtask_2359.py
File metadata and controls
45 lines (35 loc) · 1.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from typing import List
from collections import deque
class Solution:
def closestMeetingNode(self, edges: List[int], node1: int, node2: int) -> int:
n = len(edges)
gr = [[] for x in range(n)]
for i in range(n):
if edges[i] != -1:
gr[i].append(edges[i])
inf = int(1e9+228)
def get_dist(st):
q = deque()
q.append(st)
dist = n * [inf]
dist[st] = 0
while q:
u = q.pop()
for v in gr[u]:
if dist[v] > dist[u] + 1:
dist[v] = dist[u] + 1
q.append(v)
return dist
from_a = get_dist(node1)
from_b = get_dist(node2)
# print(f'from_a = {from_a}')
# print(f'from_b = {from_b}')
idx, val = -1, inf
for i in range(n):
if from_a[i] != inf and from_b[i] != inf:
if val > max(from_a[i], from_b[i]):
val = max(from_a[i], from_b[i])
idx = i
return idx
print(Solution().closestMeetingNode(edges = [2,2,3,-1], node1 = 0, node2 = 1))
print(Solution().closestMeetingNode(edges = [1,2,-1], node1 = 0, node2 = 2))