섬
시간 제한3초메모리 제한128 MB
서로 겹치지 않는 단순 다각형 섬들이 주어질 때, 육지 이동은 공짜이므로 한 섬에서 다른 섬까지 헤엄쳐야 하는 최소 총 물 거리를 구한다.
문제
그리스의 금융 위기는 그리스인들, 특히 수많은 섬 중 하나에 사는 사람들에게 큰 영향을 미쳤다. 그들 가운데 일부는 배를 타고 섬에서 섬으로 이동할 형편조차 되지 못한다. 그래서 되도록 다른 섬으로 건너가는 일을 피하지만, 정말로 건너가야만 할 때에는 헤엄쳐서 이동해야 한다.
헤엄치기는 매우 힘들고 위험할 수 있으므로, 이들은 헤엄쳐야 하는 거리를 최대한 줄이고 싶어 한다. 이때 섬 A에서 섬 B로 곧장 헤엄치는 것이 항상 최선은 아니다. 예를 들어 A에서 C로 헤엄친 뒤 섬 C를 걸어서 가로지르고, 다시 C에서 B로 헤엄치는 편이 더 이로울 수 있다. 실제로 가장 좋은 이동 경로는 여러 섬을 거치게 될 수도 있다.
섬들은 단순 다각형으로 주어진다. 두 섬이 주어질 때, 한 섬에서 다른 섬으로 이동하기 위해 헤엄쳐야 하는 총 거리의 최솟값을 구하여라. 육지 위에서 이동한 거리는 전혀 중요하지 않다(비용에 포함되지 않는다).
입력
첫째 줄에 테스트 케이스의 개수를 나타내는 양의 정수가 주어진다(최대 ). 그다음 각 테스트 케이스마다 다음이 주어진다.
- 한 줄에 정수 (): 섬의 개수.
- 한 줄에 공백으로 구분된 두 정수 와 (, ): 각각 이동의 출발 섬과 도착 섬.
- 이어서 각 섬마다:
- 한 줄에 정수 (): 그 섬을 나타내는 다각형의 꼭짓점 개수.
- 개의 줄에 각각 공백으로 구분된 두 정수 와 (): 번째 꼭짓점의 좌표.
다각형(섬)은 자기 자신과 교차하지 않으며, 서로 겹치거나 닿지도 않는다. 각 다각형의 꼭짓점은 반시계 방향으로 주어진다.
출력
각 테스트 케이스마다:
- 한 줄에 실수 하나: 출발 섬에서 도착 섬까지 이동하기 위해 헤엄쳐야 하는 최소 거리를 소수점 아래 셋째 자리까지 반올림하여 출력한다.
테스트 데이터는 최종 답에 절대 오차 이하가 있어도 반올림 결과가 달라지지 않도록 주어진다.
힌트
최적 경로가 항상 두 섬 사이를 곧장 헤엄치는 것은 아니다. 가까운 섬으로 헤엄쳐 간 뒤 그 섬을 걸어서(비용 없이) 가로지르고 이어서 나아가는 편이 더 짧을 수 있으므로, 최적의 이동 계획은 여러 중간 섬을 거칠 수 있다. 거리에는 물 위를 지나는 구간만 포함된다.