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

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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바