Distant Relatives
https://www.hackerrank.com/contests/codenection-2021-closed-category/challenges/distant-relatives
Last updated
https://www.hackerrank.com/contests/codenection-2021-closed-category/challenges/distant-relatives
Last updated
10
4 1
6 5
7 2
6 3
1 7
2 10
10 9
3 8
8 99from collections import defaultdict, deque
def longest_path(edges, n):
graph = defaultdict(list)
for start, end in edges:
graph[start].append(end)
graph[end].append(start)
def bfs(start):
visited = set()
queue = deque([(start, 1)])
visited.add(start)
max_dist = 1
furthest_node = start
while queue:
node, dist = queue.popleft()
if dist > max_dist:
max_dist = dist
furthest_node = node
for neighbor in graph[node]:
if neighbor not in visited:
visited.add(neighbor)
queue.append((neighbor, dist + 1))
return furthest_node, max_dist
start_node, _ = bfs(1)
_, max_length = bfs(start_node)
return max_length
n = int(input())
edges = []
for _ in range(n-1):
a, b = map(int, input().split())
edges.append((a, b))
print(longest_path(edges, n) - 1) # Why additional -1?def longest(start):
max_d = [0]
def dfs2(u, p):
max_len = [0, 0]
for v in g[u]:
if v != p:
curr = dfs2(v, u)
if curr + 1 > max_len[0]:
max_len[1] = max_len[0]
max_len[0] = curr + 1
elif curr + 1 > max_len[1]:
max_len[1] = curr + 1
max_d[0] = max(max_d[0], max_len[0] + max_len[1])
return max_len[0]
dfs2(start, -1)
return max_d[0]
n = int(input())
g = [[] for _ in range(n+1)]
for _ in range(n-1):
a, b = map(int, input().split())
g[a].append(b)
g[b].append(a)
print(longest(1))