백준

백준 1167번: 트리의 지름

https://www.acmicpc.net/problem/1167

 

1167번: 트리의 지름

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

www.acmicpc.net

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
from collections import deque
import sys
input = sys.stdin.readline
= int(input())
= [[] for _ in range(n+1)]
 
for i in range(n):
    data = list(map(int, input().split()))
    index = 0
    s = data[index]
    index+=1
    while True:
        e = data[index]
        if e == -1:
            break
        v = data[index+1]
        a[s].append((e,v))
        index+=2
 
distance = [0]*(n+1)
visited = [False]*(n+1)
 
def BFS(v):
    queue = deque()
    queue.append(v)
    visited[v] = True
    while queue:
        tree = queue.popleft()
        for i in a[tree]:
            if not visited[i[0]]:
                visited[i[0]]=True
                queue.append(i[0])
                distance[i[0]] = distance[tree] + i[1]
BFS(1)
 
maxdis = distance.index(max(distance))
distance = [0]*(n+1)
visited = [False]*(n+1)
BFS(maxdis)
 
print(max(distance))
cs

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

백준 1300번: K번째 수  (1) 2023.02.16
백준 2343번: 기타 레슨  (0) 2023.02.16
백준 2023번: 신기한 소수  (0) 2023.02.10
백준 1517번: 버블 소트  (0) 2023.02.09
백준 13023번: ABCDE  (0) 2023.02.09