LCA
문제 사이트
코드
시간 복잡도
O(\((\mathrm{N} + \mathrm{M})\log{\mathrm{N}}\))
설명
Node 마다 1, 2, 4, 8 … 으로 지수적으로 올라간 부모의 정보를 이용해 LCA 알고리즘을 Log 단위로 낮추는 것이 목표.
총 2가지 단계가 있다.
단계 1. 트리 구성
- DFS 로 트리를 구성 하면서 노드마다 루트로부터의
Depth
를 저장한다.
- 그리고 현재 Node 의 지수적으로 올라간 부모의 정보를
ParentTB
에 기록한다.
단계 2. LCA
ParentTB
를 이용해서 Depth 가 큰 쪽이 다른쪽 Depth 와 같게 되도록 부모로 올린다.
ParentTB
를 이용해서 처음으로 달라지는 지점 이전 부모로 이동한다. 부모가 같아질 때까지 이를 반복한다. 최악 Log(N)
번 while 문을 돌게 된다.
댓글남기기