평면 직선 그래프(성벽)에서 벽을 넘는 비용이 벽의 높이일 때, 무한대 지점에서 시작해 주어진 순서대로 여러 지점을 방문하는 각 구간의 최소 비용을 구한다.
어려움9그래프기하최단 경로DFS아직 제출이 없습니다시간 제한2초메모리 제한512 MB2000년 전, 지금 이 자리에는 도시국가 인호국의 성이 서 있었다. 인호국의 성은 1번부터 N번까지 번호가 붙은 망루 N개와, 두 망루를 잇는 성벽 M개로 이루어져 있다. 성벽은 선분 모양이고, 어떤 두 성벽도 망루가 아닌 지점에서는 만나지 않으며, 어느 망루에서든 성벽을 타고 다른 모든 망루로 갈 수 있다. 인호국의 왕 인호는 이 성 안에 국가 기밀을 숨겨 두었다.
경쟁 관계인 도시국가 민석국의 왕 민석이는 그 기밀을 캐내려고 비밀 요원을 성으로 들여보낸다. 요원은 매우 빨라서 성벽이 가로막지 않는 한 이동 시간을 무시할 수 있다. 성벽을 넘을 때는 그 성벽의 높이만큼 시간이 걸린다. 망루는 통과하지 못하므로, 요원은 언제나 망루가 아닌 지점에서 성벽을 넘는다.
민석이는 요원에게 지점 Q개를 순서대로 방문하라고 명령했다. 각 지점은 성벽이나 망루와 겹치지 않는다. 요원은 성에서 무한히 멀리 떨어진 곳에서 출발해 1번 지점, 2번 지점의 순서로 찾아간다. 각 구간마다 요원이 쓰는 최소 시간을 구하자.
첫째 줄에 망루의 개수 N (1≤N≤200000)과 성벽의 개수 M (N−1≤M≤N+100)이 주어진다.
다음 N개 줄에는 i번 망루의 좌표 xi와 yi가 순서대로 주어진다. (∣xi∣,∣yi∣≤109)
다음 M개 줄에는 성벽이 잇는 두 망루의 번호 ui와 vi, 그리고 그 성벽의 높이 hi가 주어진다. (1≤ui,vi≤N, ui=vi, 1≤hi≤109)
같은 두 망루를 잇는 성벽은 많아야 하나이고, 어떤 두 성벽도 망루가 아닌 지점에서는 만나지 않는다. 임의의 두 망루 사이는 성벽을 타고 오갈 수 있다.
다음 줄에 명령의 개수 Q (1≤Q≤200000)가 주어진다.
다음 Q개 줄에는 방문할 지점의 좌표 ai와 bi가 순서대로 주어진다. (∣ai∣,∣bi∣≤109)
모든 지점은 성벽이나 망루와 겹치지 않는다.
Q개 줄을 출력한다. i번째 줄에는 i−1번 지점에서 i번 지점으로 가는 최소 시간을 출력한다. 0번 지점의 좌표는 (∞,∞), 즉 성에서 무한히 먼 곳으로 본다.
아래 그림은 망루 4개와 성벽 5개로 이루어진 성, 그리고 순서대로 방문하는 지점 3개를 나타낸다.
