아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

수로 건설

시간 제한3초메모리 제한256 MB

요약
각 마을을 서로 다른 샘에 길이 제한을 만족하는 내리막 구간들로 이어 전체 수로 길이를 최소화합니다.
난이도

보통10점 중 7점

유형
최단 경로, 그래프, 동적 계획법
정답자
아직 제출이 없습니다

문제

브리타니아를 정복한 로마 장군 아그리콜라는 새로 얻은 도시마다 그 지방에 널린 샘물을 끌어오기로 했다. 참모 웨수스 와테루스가 수로 설계를 맡았다.

샘과 도시 사이에는 언덕과 골짜기가 있다. 수로는 구간을 이어 붙여 만들고, 모든 구간은 한 언덕 꼭대기에서 시작해 다른 언덕 꼭대기에서 끝난다. 물은 아래로만 흐르므로 구간은 반드시 더 높은 언덕에서 더 낮은 언덕으로 놓는다. 높이가 같은 두 언덕 사이에는 구간을 놓을 수 없다. 구간 아래에 언덕이나 샘, 도시가 있어도 상관없다. 그대로 뚫고 지나갈 수 있다. 다만 로마의 기술로 놓을 수 있는 구간 하나의 길이는 qq 이하다.

구간의 길이는 두 언덕 꼭대기 사이의 3차원 유클리드 거리 (x1−x2)2+(y1−y2)2+(h1−h2)2\sqrt{(x_1-x_2)^2+(y_1-y_2)^2+(h_1-h_2)^2}이다. 샘에서 도시까지 이어지는 수로의 길이는 그 수로를 이루는 구간 길이의 합이다.

도시는 저마다 다른 샘에서 물을 받아야 하고, 한 샘이 두 도시를 맡을 수는 없다. 수로끼리 서로 교차해도 된다. 모든 도시에 물을 대는 수로 길이의 합을 가장 작게 만들어라.

입력

첫째 줄에 정수 nn, ss, tt, qq가 주어진다. nn은 언덕의 수 (0<n≤5000 < n \le 500), ss는 샘의 수 (1≤s≤401 \le s \le 40), tt는 도시의 수 (1≤t≤s1 \le t \le s), qq는 구간 하나의 최대 길이 (1≤q≤3×1061 \le q \le 3 \times 10^6)다.

다음 nn개 줄에는 언덕의 좌표와 높이를 나타내는 정수 xix_i, yiy_i, hih_i가 공백으로 구분되어 주어진다 (0≤∣xi∣,∣yi∣,hi≤1060 \le |x_i|, |y_i|, h_i \le 10^6). 언덕 번호는 주어진 순서대로 1번부터 nn번이다.

다음 줄에는 정수 ss개가 공백으로 구분되어 주어진다. 샘이 있는 언덕의 번호다.

다음 줄에는 정수 tt개가 공백으로 구분되어 주어진다. 도시가 있는 언덕의 번호다.

한 언덕에 샘이나 도시는 최대 하나만 있다.

출력

모든 도시가 서로 다른 샘에서 물을 받도록 할 때 수로 길이 합의 최솟값을 소수점 아래 여섯 자리까지 반올림해 한 줄에 출력한다. 그렇게 물을 댈 방법이 없으면 IMPOSSIBLE을 출력한다.

예제2

  1. 예제 1

    입력
    6 2 2 8
    0 0 6
    3 4 7
    0 8 8
    6 8 8
    6 0 6
    6 4 8
    3 4
    1 5
    
    예상 출력
    20.396078
    
  2. 예제 2

    입력
    4 2 2 3
    1 3 2
    3 3 2
    2 1 1
    2 6 1
    1 2
    3 4
    
    예상 출력
    IMPOSSIBLE