문제 링크
- http://icpc.me/18251
문제 출처
- Good Bye, BOJ 2019 E번
사용 알고리즘
- 스위핑
- DFS
시간복잡도
- $O(N log N)$
풀이
문제에 주어진 그림처럼 각 정점을 좌표 평면 상의 점으로 잡아줍시다. DFS를 이용해 정점의 깊이와 중위 순회를 이용해 쉽게 할 수 있습니다.
단순히 2차원 점들이 주어진 문제였다면 KOI 2015 중등 4번 금광처럼 $O(N^2 log N)$에 풀 수 있습니다.
하지만 이 문제에서 정점의 개수는 최대 262143이고 단순한 2차원 점이 아니라 포화이진트리 조건이 있습니다.
y좌표의 종류가 $log N$ 가지라는 것을 이용해 높이의 상/하한을 제한해주고 maximum subarray를 구해주면 $O(N log^2 N)$에 해결할 수 있습니다.
루트노드부터 스위핑하듯이 내려오면 $O(N log N)$이라는데, 저는 그냥 로그 제곱으로 풀었습니다.
전체 코드
1 |
|