문어

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

보통7그래프최단 경로그리디구현아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

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

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

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

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

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

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

입력

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

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

다음 줄에는 실수 nnz1,z2,,znz_1, z_2, \ldots, z_n이 주어지고 각 ziz_i1-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_j1pj<qjn1 \le p_j < q_j \le n을 만족하고, 문어가 위치 pjp_j에서 qjq_j로, 그리고 qjq_j에서 pjp_j로 바로 이동할 수 있다는 뜻이다. 같은 통로가 두 번 이상 주어질 수 있다. ss에서 tt로 가는 방법은 항상 존재한다.

출력

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

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