practivceAlgorithm/백준

[백준][Python] 1595 북쪽나라의 도로 : 함수 재활용 시 반환값에 주의

findTheValue 2021. 10. 7. 16:50

트리의 지름 문제. bfs 두번을 통해 최대 거리를 두번 산출해주면 된다.

조금 중요한게 graph배열을 1부터가 아니라 0부터 만들어 주어야 한다는점.

(노드가 1개일때 내가 노드를 1로 설정해둬서.. 지금보니 그냥 target_node를 1로 설정해 주었다면 1부터 해도 될것같다)

 

import sys
input = sys.stdin.readline
from collections import deque

def bfs(start):
    q = deque()
    q.append((start, 0))
    visited = [False for __ in range(10001)]
    visited[start] = True
    max_dist = 0
    target_node = 0
    while q:
        cur_node, cur_dist = q.popleft()
        for next_node, next_dist in graph[cur_node]:
            if visited[next_node]: 
                continue
            visited[next_node] = True
            dist = next_dist + cur_dist
            if dist > max_dist:
                max_dist, target_node = dist, next_node
            q.append((next_node, dist))
    return (target_node, max_dist)


edges = []
while 1:
    try:
        a, b, c = map(int, input().split())
        edges.append((a, b, c))
    except: 
        break
n = len(edges)
graph = {i: [] for i in range(10001)}
for edge in edges:
    a, b, c = edge
    graph[a].append((b, c))
    graph[b].append((a, c))
print(bfs(bfs(1)[0])[1])

'practivceAlgorithm > 백준' 카테고리의 다른 글

[백준][Python] 1895 필터  (0) 2021.10.08
[백준][Python] 2474 세 용액  (1) 2021.10.07
[백준][Pyhton] 2812 크게만들기  (0) 2021.10.07
[백준][Python] 1817 짐챙기는 숌  (0) 2021.10.07
[백준][Python] 1613 역사  (0) 2021.10.07