공부, 기록

백준 1167. 트리의 지름 파이썬 본문

코딩

백준 1167. 트리의 지름 파이썬

무는빼주세요 2020. 11. 14. 14:19

문제링크 : www.acmicpc.net/problem/1167

 

1167번: 트리의 지름

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

www.acmicpc.net

 

import sys
input=sys.stdin.readline

def solution(graph,V):
    stack = list()
    visitied = set()
    stack.append((0,0))
    visitied.add(0)
    maxlen = 0
    maxnode=0
    while stack:
        node, dist = stack.pop()
        if dist > maxlen:
            maxlen = dist
            maxnode = node
        for nodedist in graph[node]:
            if nodedist[0] not in visitied:
                stack.append((nodedist[0],dist+nodedist[1]))
                visitied.add(nodedist[0])
    stack = list()
    visitied = set()
    stack.append((maxnode,0))
    visitied.add(maxnode)
    maxlen = 0
    while stack:
        node, dist = stack.pop()
        if dist > maxlen:
            maxlen = dist
            maxnode = node
        for nodedist in graph[node]:
            if nodedist[0] not in visitied:
                stack.append((nodedist[0],dist+nodedist[1]))
                visitied.add(nodedist[0])

    return maxlen
def main():
    V = int(input())
    graph=dict()
    for i in range(V):
        graph.setdefault(i,list())
    for i in range(V):
        line = list(map(int,input().split()))
        for j in range(1,len(line),2):
            
            if line[j] == -1:
                break
            else:
                graph[line[0]-1].append((line[j]-1,line[j+1]))
                graph[line[j]-1].append((line[0]-1,line[j+1]))
    print(solution(graph,V))

main()