13306번 - 트리
안녕하세요.
문제를 아래 방법과 같이 풀었는데, 7퍼센트 즈음에서 틀렸습니다..가 나옵니다.
어디서 틀린지 반례 혹은 논리적 오류를 알려주시면 감사하겠습니다.
풀이 방법은 다음과 같습니다.
1. 모든 노드의 color를 0으로 두고, i 번 노드와 i 번 노드의 부모 사이 엣지를 끊었을 경우 i 번 노드를 루트로 하는 서브트리의 모든 노드의 color를 증가시킨다.
2. i 번 노드와 j 번 노드가 연결되었는지를 두 가지를 체크하여 확인한다.
- i 번 노드와 j 번 노드의 색이 같은지 확인
- i 번 노드와 j 번 노드의 LCA의 색이 i 번 노드와 같은지 확인
1.의 시간복잡도를 O(lgN)으로 만들기 위해 그래프를 dfs 경로 순대로 재배치하면 각 노드 별로 자신이 루트가 되는 서브트리의 색을 1 증가시키는 것을 segment tree + lazy propagation로 풀었습니다.
고수님들의 조언 부탁드립니다.
감사합니다.
20번째 줄의 Math.log가 natural log였습니다. 하하하하하하핳.....
아래와 같이 수정하면 동작합니다.
댓글을 작성하려면 로그인해야 합니다.
win198978 3년 전
안녕하세요.
문제를 아래 방법과 같이 풀었는데, 7퍼센트 즈음에서 틀렸습니다..가 나옵니다.
어디서 틀린지 반례 혹은 논리적 오류를 알려주시면 감사하겠습니다.
풀이 방법은 다음과 같습니다.
1. 모든 노드의 color를 0으로 두고, i 번 노드와 i 번 노드의 부모 사이 엣지를 끊었을 경우 i 번 노드를 루트로 하는 서브트리의 모든 노드의 color를 증가시킨다.
2. i 번 노드와 j 번 노드가 연결되었는지를 두 가지를 체크하여 확인한다.
- i 번 노드와 j 번 노드의 색이 같은지 확인
- i 번 노드와 j 번 노드의 LCA의 색이 i 번 노드와 같은지 확인
1.의 시간복잡도를 O(lgN)으로 만들기 위해 그래프를 dfs 경로 순대로 재배치하면 각 노드 별로 자신이 루트가 되는 서브트리의 색을 1 증가시키는 것을 segment tree + lazy propagation로 풀었습니다.
고수님들의 조언 부탁드립니다.
감사합니다.