문제
https://www.acmicpc.net/problem/18126
텔레토비 동산에 사는 너구리 구구는 입구, 거실, 주방, 안방, 공부방, 운동실, 음악실, 음식 창고 등 N개의 방을 가지고 있다. 입구를 포함한 모든 방은 1부터 N까지의 번호가 있고, 입구는 1번이다. 구구의 집으로 들어가는 입구는 한 개이며 입구과 모든 방들은 총 N-1개의 길로 서로 오고 갈 수 있다.
구구는 스머프 동산에서 멜론아 아이스크림을 발견했다. 구구는 무더운 여름 햇살을 피해 최대한 입구에서 먼 방에 아이스크림을 숨기려고 한다.
구구가 집 입구에서 멜론아 아이스크림을 숨기려고 하는 방까지 이동하는 거리를 구하여라.
입력
첫째 줄에 정수 N(1 ≤ N ≤ 5,000)이 주어진다.
다음 N-1개의 줄에 구구의 집의 모든 길의 정보가 정수 A, B, C(1 ≤ A, B ≤ N, 1 ≤ C ≤ 1,000,000,000)로 주어진다.
A번 방과 B번 방 사이를 양방향으로 연결하는 길의 길이가 C임을 의미한다.
출력
구구가 집 입구에서 멜론아 아이스크림을 숨기려고 하는 방까지 이동하는 거리를 구하여라.
Algorithm
트리이기에 사이클 X
visited로 역방향을 없애고 한번만 방문해도 모든 정점을 거치는 유일한 경로의 누적거리 계산됨
BFS를 이용해 순서대로 노드를 처리하면서 거리를 합해 최댓값을
Code
import sys
from collections import deque
input = sys.stdin.readline
N = int(input())
dist = [[] for _ in range(N + 1)]
for _ in range(N - 1):
a, b, c = map(int, input().split())
dist[a].append((b, c))
dist[b].append((a, c))
visited = [False] * (N + 1)
q = deque([(1, 0)])
visited[1] = True
total = 0
while q:
u, d = q.popleft()
if d > total:
total = d
for v, w in dist[u]:
if not visited[v]:
visited[v] = True
q.append((v, d + w))
print(total)
'Koala - 19기 > 코딩테스트 심화 스터디' 카테고리의 다른 글
[백준/Python] #2823 유턴싫어 (0) | 2025.08.10 |
---|---|
[백준/Python] 11726 : 2*n 타일링 (0) | 2025.08.03 |
[백준/Python] #25706 자전거 묘기 (0) | 2025.08.03 |
[백준/python] 9095: 1,2,3더하기 (0) | 2025.08.02 |
[python] 백준 11053 (0) | 2025.08.01 |