[트리] 트리의 지름 구하기

2023. 9. 22. 22:17·Computer Science/Algorithms

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

 

1967번: 트리의 지름

파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연

www.acmicpc.net

 

트리의 지름은 DFS 두 번으로 O(N)의 시간 복잡도로 구현이 가능하다.

  1. 트리에서 아무 노드나 잡고 그 노드에 대한 먼 노드를 구하고 이 노드를 n1이라고 하자.
  2. n1에 대한 가장 먼 노드를 한번 더 구한다. 이 노드를 n2라고 하자.
  3. 이제 n1과 n2의 거리가 트리의 지름이 된다.
import sys, heapq
from collections import deque
si = sys.stdin.readline
sys.setrecursionlimit(10**8)

n = int(si())
graph = [[] for _ in range(n+1)]

def dfs(x,wei) :
    for i in graph[x] :
        a, b = i
        if distance[a] == -1 :
            distance[a] = b + wei
            dfs(a, b + wei)

for _ in range(n-1) :
    a,b,c=map(int,si().split())
    graph[a].append([b,c])
    graph[b].append([a,c])

distance = [-1] * (n+1)
distance[1] = 0
dfs(1,0)

n1 = distance.index(max(distance))
distance = [-1] * (n+1)
distance[n1] = 0
dfs(n1, 0)

print(max(distance))
'Computer Science/Algorithms' 카테고리의 다른 글
  • [수학] - 최소공배수, 최대공약수 구하기
  • [트리] 트리의 리프노드 개수 구하기
  • [링크드 리스트] 링크드 리스트 뒤집기
  • [MST] BOJ 1197번: 최소 스패닝 트리
kimdozzi
kimdozzi
끝까지 포기하지 않으면, 내가 다 이겨!
  • kimdozzi
    도브로
    kimdozzi
  • 전체
    오늘
    어제
    • 분류 전체보기 (132)
      • Problem Solving (49)
        • Baekjoon (29)
        • Programmers (0)
        • LeetCode (17)
        • 삼성 유형 (2)
      • Computer Science (27)
        • Operating System (2)
        • Algorithms (13)
        • Network (6)
        • DataBase (6)
      • Backend (33)
        • JavaScript (0)
        • TypeScript (6)
        • Java (7)
        • Spring Boot (7)
        • Spring Security (6)
        • JPA (2)
        • Mybatis (1)
        • Junit5 (1)
        • Redis (3)
      • DevOps (14)
        • Git, Github (5)
        • docker (4)
        • AWS (3)
        • nginx (2)
      • etc (6)
        • IntelliJ (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 티스토리
    • 설정
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    도커
    PrefixSum
    컨테이너
    AWS
    인터페이스
    CORS
    구간합
    imos법
    TypeScript
    docker
    S3
    온라인 쿼리
    docker image
    구간 업데이트
    segment tree
    오블완
    누적합
    오프라인 쿼리
    티스토리챌린지
    python
    파이썬
    interface
    Bucket
    타입스크립트
    알고리즘
    인덱스 시그니처
    인덱서블 타입
    백준
    삼성기출
    세그먼트 트리
    점 업데이트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
kimdozzi
[트리] 트리의 지름 구하기
상단으로

티스토리툴바