tizm423   3년 전

세그먼트 트리를 이용해서 풀어보려했습니다.

전위탐색 시킬 때 왼쪽노드를 먼저 방문하고 오른쪽 노드를 방문하는데 그 사이에 부모노드를 한번 더 넣어준것이 tour입니다.

여기서 각 노드가 tour에서 처음 나타난 부분을 locInTour에 저장시켰습니다.

세그먼트 트리는 tour에 있는 노드로 만드는데, 깊이가 가장 낮은 노드를 트리에 저장시켰습니다.

따라서 a와 b를 입력받고, 이 노드가 tour에서 처음 나타난 부분을 구간으로 잡아 세그먼트 트리에 쿼리를 날리면

LCA를 받는다고 생각하고 풀었습니다.

혹시 제가 코드를 잘못짠걸까요??

틀린부분이 있으면 지적 부탁드립니다!!!

dpjungmin   3년 전

두 노드가 연결된 경우 "번호가 낮은 노드가 부모 노드일 것이다" 라는 가정을 한 것이 잘못된 것 같습니다.

트리의 연결상태를 입력받는 부분과 buildTour 함수를 조금만 손보면 될 것 같습니다.


수정된 코드는 아래와 비슷할 것 같습니다.

tizm423   3년 전

@dpjungmin 님 정말 감사합니다.. 

가장 기본적인 부분에서 실수했네요..ㅠㅠ

몇일동안 고생했는데 덕분에 깔끔하게 해결됐습니다. 정말 감사합니다!!

댓글을 작성하려면 로그인해야 합니다.