알고리즘 문제 풀이/백준

[트리의 지름/G2/Python3]

제유찬 2024. 11. 5. 18:30

1167번 트리의 지름 G2

 

문제
트리의 지름이란, 트리에서 임의의 두 점 사이의 거리 중 가장 긴 것을 말한다. 트리의 지름을 구하는 프로그램을 작성하시오.

입력

트리가 입력으로 주어진다. 먼저 첫 번째 줄에서는 트리의 정점의 개수 V가 주어지고 (2 ≤ V ≤ 100,000) 둘째 줄부터 V개의 줄에 걸쳐 간선의 정보가 다음과 같이 주어진다. 정점 번호는 1부터 V까지 매겨져 있다.

먼저 정점 번호가 주어지고, 이어서 연결된 간선의 정보를 의미하는 정수가 두 개씩 주어지는데, 하나는 정점번호, 다른 하나는 그 정점까지의 거리이다. 예를 들어 네 번째 줄의 경우 정점 3은 정점 1과 거리가 2인 간선으로 연결되어 있고, 정점 4와는 거리가 3인 간선으로 연결되어 있는 것을 보여준다. 각 줄의 마지막에는 -1이 입력으로 주어진다. 주어지는 거리는 모두 10,000 이하의 자연수이다.



출력
첫째 줄에 트리의 지름을 출력한다.

 

더보기
그래프 이론, 그래프 탐색, 트리, dfs

 

트리의 지름을 구하는 방법은 다음과 같다.

 

특정 정점을 기준으로 가장 먼 거리의 정점을 찾는다.

해당 정점에서 한 번 더 가장 먼 거리의 정점을 구하고, 그 사이의 길이를 구한다.

 

해당 문제는 Diameter of Tree로 불린다.

 

더보기
import sys
sys.setrecursionlimit(10**6)

n = int(sys.stdin.readline())

routes = [[] for _ in range(n+1)]
visit = [0] * (n+1)

for i in range(n):
    route = list(map(int, sys.stdin.readline().split()))
    v = route[0]
    for i in range(1,len(route)-1,2):
        routes[v].append([route[i],route[i+1]])
        routes[route[i]].append([v,route[i+1]])

max_distance = 0
max_vertex = 1

def dfs(vertex, value):
    global max_distance
    global max_vertex
    visit[vertex] = 1
    
    for v, w in routes[vertex]:
        if visit[v] == 0:
            dfs(v,w+value)
        
    if value >= max_distance:
        max_vertex = vertex
        max_distance = value

for i in range(2):
    max_distance = 0
    visit = [0] * (n+1)
    dfs(max_vertex, 0)

print(max_distance)​

 


 

'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글

[도미노/P4/Python3]  (0) 2024.11.08
[친구 네트워크/G2/Python3]  (0) 2024.11.07
[사회망 서비스(SNS)/G3/Python3]  (0) 2024.11.04
[외판원 순회/G1/Python3]  (1) 2024.11.03
[가운데를 말해요/G2/Python3]  (1) 2024.11.02