BOJ 25782 Desert Travel

BOJ 25782 Desert Travel

문제 링크:

문제 내용

좌표평면에 nn개의 점이 있습니다. aa번 점에서 bb번 점으로 이동하려고 할 때, 그 과정에서 0개 이상의 점을 거쳐서 갈 수 있습니다. 한 점에서 다른 점으로 직접 이동할 때는 그 거리만큼의 비용이 들며, 경로 전체의 비용은 각각의 비용의 최댓값입니다. (a,b)(a, b)의 쌍이 여러 개 주어질 때, 각각에 대해 최소 비용을 구하세요.

입력

첫 줄에는 점의 개수 nn이 주어집니다. (1n50001 \le n \le 5000)

다음 nn줄에는 각 점의 좌표 (x,y)(x, y)가 한 줄에 하나씩 주어집니다. (106xi,yi106-10^6 \le x_i, y_i \le 10^6) 좌표는 모두 정수입니다.

다음 줄에는 쿼리의 개수 qq가 주어집니다. (1q500  0001 \le q \le 500\;000)

다음 qq줄에는 각 쿼리의 정보 (a,b)(a, b)가 한 줄에 하나씩 주어집니다. (1a,bn1 \le a, b \le n)

출력

각 쿼리에 대해, aa에서 bb로 가는 경로 중 비용이 가장 작은 것의 비용을 출력하세요. 절대 또는 상대 오차가 10610^{-6} 이하이면 정답으로 인정됩니다.

문제 풀이

스포일러

먼저 minimum spanning tree를 구합니다. nn이 아주 크지 않고 시간과 메모리가 충분히 주어지므로, n2n^2개의 가능한 간선을 모두 고려하여 스패닝 트리를 만들 수 있습니다.

그러고 나서 스패닝 트리 위에서 sparse table을 사용한 LCA 등을 이용하여 두 점 사이의 경로 위의 최댓값을 구할 수 있습니다.

Last updated on