N개의 노드 (10만)
M개의 쿼리 (10만)
트리가 다음과 같이 주어질때
빠르게 노드간 거리를 탐색하는 방법이 있나요?
N과 Q가 최대 10만이라 BFS나 DFS로 할 경우 시간초과가 나지 않나요?
입력 예:
5(노드 개수) 4(연결 노드) 4(쿼리 개수)
(연결 노드)
2 4 (4번의 부모노드 2)
1 5 (5번의 부모노드 1)
1 3
1 2
(쿼리)
1 5 (1에서 5까지의 거리)
2 3
3 5
1 4
출력:
2 (1 -> 5)
3 (2 -> 1 -> 3)
3 (3 -> 1 -> 5)
3 (1 -> 2 -> 4)
LCA O(lgN)
감사합니다!!
질문이 넘 이상한데 저 댓글이 대답이 되다니 충-격
ㄴ질문 매우 정상적 답변 매우 정상적
LCA를 계산해서 height(a)+height(b)-2height(lca(a,b)) 로 거리를 구할 수 있고, 모든 height는 한 번의 dfs로 전처리해둘 수 있으며 lca는 binary lifting이나 전위순회 후 세그트리로 O(lgn) 만에 찾을 수 있음.
코드몬스터 ㅋ
애초에 되게 유명한문제임 LCA하면 꼭 나오는 그런거
여기서 응용하면 HLD 쿼리 처리하는 법도 생각해낼수있음