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

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

새로운 시작

시간 제한2초메모리 제한128 MB

요약
연료통 용량 안에서 급유 가능 공항에서 연료를 채우며 시작 공항에서 목적지로 가는 최단 시간을 구합니다.
난이도

보통10점 중 7점

유형
그래프, 최단 경로, 비트 연산
정답자
아직 제출이 없습니다

문제

극심한 태양 폭발로 지구가 뜨겁게 달아올라 거대한 재난이 일어났습니다. 지각판이 맨틀 위를 자유롭게 떠다니고, 유례없는 규모의 지진이 대도시를 무너뜨리며, 거대한 쓰나미가 산을 삼키고, 여러 나라가 용암과 화산재의 바다로 변해 갑니다.

2012년 12월 21일, 당신과 가족이 종말에서 살아남을 유일한 기회는 히말라야에 있는 정부의 방주, 즉 인류를 구할 현대판 방주에 도달하는 것입니다. 당신에게는 일정한 속도로 나는 비행기 한 대와, 아직 남아 있는 모든 공항이 표시된 지도가 있습니다. 하지만 모든 공항 쌍이 연결되어 있는 것은 아닙니다. 어떤 항로는 거대한 화산재 구름에 막혀 있고, 어떤 공항들은 서로 너무 멀리 떨어져 있습니다. 게다가 모든 공항에서 급유할 수 있는 것도 아닙니다. 어떤 공항에는 텅 빈 활주로만 남아 있어 연료를 채울 수 없습니다. 모든 항법 장비가 파괴되었으므로, 두 공항을 잇는 유일한 비행 경로는 최단 경로(구면 위의 대원 호)뿐입니다. 여기에 더해 대기 불안정과 급격한 공기 밀도 변화 때문에 비행마다 엔진의 연료 효율이 달라져 연료 소모량도 제각각입니다.

다행히도 당신은 어떤 공항 사이를 비행할 수 있는지, 그 비행에 드는 연료량은 얼마인지, 그리고 어디에서 급유할 수 있는지를 알고 있습니다. 이제 출발 공항에서 히말라야 공항까지 최대한 빨리 가는 방법만 찾으면 됩니다. 각 공항의 좌표와 급유 가능 여부, 연료 탱크 용량, 비행기의 속도, 어떤 공항 쌍이 비행으로 연결되는지, 각 비행에 필요한 연료량이 주어질 때, 출발 공항에서 목적지 공항까지 가는 데 필요한 최소 시간을 구하는 프로그램을 작성하세요.

입력

첫째 줄에 네 정수 NN, MM, VV, CC가 주어집니다. 각각 공항의 수, 비행으로 연결된 공항 쌍의 수, 비행기의 일정한 속도, 연료 탱크 용량을 뜻합니다.

이어지는 NN개의 줄에는 공항 정보가 주어집니다. 모든 공항은 중심이 원점 (0,0,0)(0, 0, 0)인 지구의 표면 위 한 점으로 표현됩니다. 이 중 ii번째 줄에는 세 실수와 한 정수 XiX_i, YiY_i, ZiZ_i, RiR_i가 주어집니다. 앞의 세 값은 ii번 공항의 좌표이고, RiR_i는 급유 가능 여부입니다(Ri=1R_i = 1이면 급유 가능, Ri=0R_i = 0이면 불가능).

그다음 MM개의 줄에는 가능한 비행 정보가 주어집니다. 연결된 공항 쌍에는 순서가 없습니다. 즉, AA에서 BB로 가는 비행과 BB에서 AA로 가는 비행은 성질이 같습니다. 이 중 kk번째 줄에는 세 정수 AkA_k, BkB_k, FkF_k가 주어지며, AkA_k번 공항과 BkB_k번 공항 사이를 오가는 비행에 FkF_k만큼의 연료가 필요함을 뜻합니다(양방향 모두 동일).

마지막 줄에는 두 정수 SS와 TT가 주어집니다. 각각 경로의 출발 공항과 도착 공항입니다.

출력

출발 공항 SS에서 도착 공항 TT까지 가는 데 필요한 최소 시간을, 소수점 아래 정확히 1010자리까지 반올림하여 한 줄에 출력하세요.

도달할 수 있는 경로가 전혀 없다면 한 줄에 정수 0을 출력하세요.

제한

  • 2≤N≤10002 \le N \le 1000 — 공항의 수. 정수.
  • 1≤M≤100001 \le M \le 10000 — 가능한 비행의 수. 정수.
  • 1≤V≤10001 \le V \le 1000 — 비행기의 일정한 속도. 소수점 아래 최대 33자리까지의 실수.
  • 1≤C≤10001 \le C \le 1000 — 연료 탱크 용량. 정수.
  • −100≤Xi,Yi,Zi≤100-100 \le X_i, Y_i, Z_i \le 100 — ii번 공항의 좌표. 소수점 아래 최대 1818자리까지의 실수. 또한 모든 ii에 대해 Xi2+Yi2+Zi2X_i^2 + Y_i^2 + Z_i^2의 값은 일정합니다. 즉, 한 입력 안에서 모든 공항은 지구 중심으로부터 같은 거리에 있습니다.
  • 급유가 가능한 공항의 수는 11개 이상 2020개 이하입니다.
  • 지구의 반지름은 11 이상의 정수입니다.
  • 1≤Ak,Bk≤N1 \le A_k, B_k \le N — kk번 비행에 등장하는 두 공항. 서로 다른 정수. 각 (순서 없는) 공항 쌍은 입력에 최대 한 번만 나타납니다.
  • 1≤Fk≤C1 \le F_k \le C — kk번 비행에서 소모되는 연료량. 정수.

추가 사항:

  • 두 공항 사이의 직항 비행 경로는 지구 표면(구면) 위에서 두 점을 잇는 가장 짧은 호, 즉 대원 호입니다. 그런 호가 둘 이상 있더라도 중요한 것은 거리뿐입니다.
  • 어떤 비행도 그 호의 길이가 10−610^{-6}보다 짧지 않습니다.
  • 정밀도 오차로 인해 공항마다 지구 중심까지의 거리가 미세하게 다를 수 있지만, 그 거리와 지구 반지름의 절대 차이는 10−1010^{-10} 이하입니다. 따라서 모든 공항이 정확히 지구 표면 위에 있다고 간주해도 알고리즘의 정확성에는 아무런 영향이 없습니다.
  • RS=1R_S = 1입니다. 즉, 처음에 연료 탱크는 항상 가득 차 있습니다. 또한 급유가 가능한 공항을 방문할 때마다 탱크가 다시 가득 찹니다.
  • 착륙, 급유, 이륙, 가속에 드는 시간은 무시할 만큼 작아 00으로 간주합니다.
  • 각 비행은 서로 완전히 독립적입니다. AA에서 BB로 가는 비행의 호가 우연히 어떤 공항 CC를 지나더라도, 그것이 AA와 CC 사이 또는 BB와 CC 사이에 비행이 존재함을 뜻하지는 않습니다.

힌트

다음과 같은 상황을 생각해 봅시다. 지구의 반지름은 55, 비행기의 속도는 2.52.5, 연료 탱크 용량은 99이며, 공항 11에서 공항 33으로 가야 합니다. 급유가 가능한 공항은 11번과 66번입니다.

직항으로 이어지는 경로 1→2→31 \to 2 \to 3과 1→4→31 \to 4 \to 3의 연료 소모량은 각각 1313과 1010으로, 둘 다 탱크 용량 99를 넘습니다. 사실 급유 없이 11에서 33까지 가는 모든 경로는 99보다 많은 연료를 필요로 하므로, 유일한 방법은 66번 공항에서 급유하는 것입니다.

66번 공항에 도달하는 경로는 1→2→61 \to 2 \to 6, 1→4→61 \to 4 \to 6, 1→5→2→61 \to 5 \to 2 \to 6의 세 가지이며, 이 중 앞의 두 경로가 더 짧습니다. 66번에서 탱크를 가득 채운 뒤 곧바로 22번을 거쳐 33번으로 가려 하면 연료가 11만큼 모자랍니다. 따라서 44번을 거쳐야 하며, 33번에 도착할 때 연료는 정확히 바닥나지만 무사히 도착할 수 있습니다.

결국 최적 경로는 1→2→6→4→31 \to 2 \to 6 \to 4 \to 3 또는 1→4→6→4→31 \to 4 \to 6 \to 4 \to 3이며, 두 경로 모두 네 개의 90∘90^\circ 호로 이루어져 총 길이가 지구 적도 둘레인 2πR2\pi R과 같습니다. 따라서 걸리는 시간은 2πR/V≈12.56637061442\pi R / V \approx 12.5663706144입니다.

예제5

  1. 예제 1

    입력
    6 9 2.5 9
    0.0 5.0 0.0 1
    0.0 0.0 -5.0 0
    0.0 -5.0 0.0 0
    0.0 0.0 5.0 0
    3.0 4.0 0.0 0
    4.0 3.0 0.0 1
    1 2 5
    2 3 8
    1 4 5
    4 3 5
    1 5 1
    5 6 9
    5 2 1
    2 6 2
    6 4 4
    1 3
    
    예상 출력
    12.5663706144
    
  2. 예제 2

    입력
    2 1 1 10
    1 0 0 1
    0 1 0 0
    1 2 3
    1 2
    
    예상 출력
    1.5707963268
    
  3. 예제 3

    입력
    3 1 1 10
    1 0 0 1
    0 1 0 0
    0 0 1 0
    1 2 4
    1 3
    
    예상 출력
    0
    
  4. 예제 4

    입력
    3 2 1 8
    1 0 0 1
    0 1 0 0
    -1 0 0 0
    1 2 5
    2 3 5
    1 3
    
    예상 출력
    0
    
  5. 예제 5

    입력
    3 2 1 8
    1 0 0 1
    0 1 0 1
    -1 0 0 0
    1 2 5
    2 3 5
    1 3
    
    예상 출력
    3.1415926536