만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

문어

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

요약
문어가 보호값 0으로 그래프를 이동하며 도구를 주워 보호값을 높이고, 천적이 있는 위치를 지날 때마다 max(0, p - h)의 확률로 잡아먹힌다. s에서 t까지 생존 확률이 가장 높은 경로를 구한다.
난이도

보통10점 중 7점

유형
그래프, 최단 경로, 그리디, 구현
정답자
아직 제출이 없습니다

문제

문어는 도구를 써서 일을 해내는 모습이 관찰된 몇 안 되는 동물이다. 코코넛 껍데기 두 쪽을 바닥에서 들고 다니다가 위험을 느끼면 그 안으로 숨는 문어의 영상이 널리 알려져 있다.

은신 도구는 성능이 서로 다르다. 바다 바닥 여러 곳에 들고 다닐 수 있는 은신 도구가 흩어져 있다면, 조금 돌아가서 더 좋은 도구를 챙긴 다음 목적지로 향하는 편이 잡아먹히지 않을 확률을 높인다. 살아남을 확률이 가장 높은 경로를 계획하는 프로그램을 작성하라.

바다 바닥의 위치 nn개와 위치 사이를 잇는 통로가 주어진다. 각 위치에는 포식자가 있거나 은신 도구가 있거나 둘 다 없다. 포식자의 탐지 능력은 00과 11 사이의 실수 pp이고, 은신 도구의 보호력은 00과 11 사이의 실수 hh이다. 보호력 hh인 도구를 쓰는 문어가 탐지 능력 pp인 포식자가 있는 위치에 머무르면, 포식자는 확률 max⁡(0,p−h)\max(0, p - h)로 문어를 잡아먹는다.

문어는 출발 위치 ss에서 아무 도구도 없이 출발하므로 처음 보호력은 00이다. 통로를 따라 이동해 목표 위치 tt에 도달해야 하며, 규칙은 다음과 같다.

  • 문어가 어떤 위치에 머무르면 그 위치의 포식자 판정을 받는다. 출발 위치 ss와 목표 위치 tt에서도 판정을 받고, 같은 위치를 다시 지나면 판정을 다시 받는다.
  • 은신 도구가 있는 위치에 도달하면 그 도구를 집을 수 있다. 집은 도구는 계속 가지고 다니고, 여러 개를 가지고 있으면 그중 보호력이 가장 큰 도구를 쓴다.
  • 같은 통로와 같은 위치는 몇 번이든 다시 지날 수 있다.

각 판정은 서로 독립이다. 문어가 ss에서 출발해 tt까지 살아서 도달할 확률의 최댓값을 구하라.

입력

첫 줄에 데이터 세트의 개수 KK가 주어진다. K≥1K \ge 1이다. 이어서 데이터 세트 KK개가 다음 형식으로 주어진다.

데이터 세트의 첫 줄에는 정수 네 개 nn, mm, ss, tt가 주어진다. 1≤n≤2001 \le n \le 200은 위치의 개수, 0≤m≤n20 \le m \le n^2은 통로의 개수, 1≤s,t≤n1 \le s, t \le n은 출발 위치와 목표 위치이다.

다음 줄에는 실수 nn개 z1,z2,…,znz_1, z_2, \ldots, z_n이 주어지고 각 ziz_i는 −1-1 이상 11 이하이다. zi<0z_i < 0이면 위치 ii에 보호력 −zi-z_i인 은신 도구가 있다. zi>0z_i > 0이면 위치 ii에 탐지 능력 ziz_i인 포식자가 있다. zi=0z_i = 0이면 위치 ii에는 포식자도 은신 도구도 없다.

다음 mm개 줄에는 통로가 하나씩 주어진다. jj번째 줄의 정수 pjp_j, qjq_j는 1≤pj<qj≤n1 \le p_j < q_j \le n을 만족하고, 문어가 위치 pjp_j에서 qjq_j로, 그리고 qjq_j에서 pjp_j로 바로 이동할 수 있다는 뜻이다. 같은 통로가 두 번 이상 주어질 수 있다. ss에서 tt로 가는 방법은 항상 존재한다.

출력

각 데이터 세트마다 먼저 Data Set x:를 한 줄에 출력한다. xx는 데이터 세트의 번호이고 11부터 센다. 다음 줄에 문어가 위치 tt까지 살아서 도달할 확률의 최댓값을 소수점 아래 넷째 자리에서 반올림해 출력한다. 소수점 아래는 정확히 네 자리를 적는다.

데이터 세트를 출력한 뒤에는 빈 줄을 하나 출력한다.

예제4

  1. 예제 1

    입력
    1
    6 6 1 6
    0 0.9 -0.4 0.6 -0.8 0.9
    1 2
    2 6
    4 5
    1 3
    5 6
    3 4
    
    예상 출력
    Data Set 1:
    0.7200
  2. 예제 2

    입력
    1
    1 0 1 1
    0.5
    
    예상 출력
    Data Set 1:
    0.5000
  3. 예제 3

    입력
    1
    5 4 1 5
    0 0.5 -0.9 1 0
    1 2
    2 3
    1 4
    4 5
    
    예상 출력
    Data Set 1:
    0.4500
  4. 예제 4

    입력
    2
    4 3 1 4
    0 0.45 0.55 0.65
    1 2
    2 3
    3 4
    3 2 1 3
    -0.6 0.7 0
    1 2
    2 3
    
    예상 출력
    Data Set 1:
    0.0866
    
    Data Set 2:
    0.9000