문어가 보호값 0으로 그래프를 이동하며 도구를 주워 보호값을 높이고, 천적이 있는 위치를 지날 때마다 max(0, p - h)의 확률로 잡아먹힌다. s에서 t까지 생존 확률이 가장 높은 경로를 구한다.
보통7그래프최단 경로그리디구현아직 제출이 없습니다시간 제한2초메모리 제한512 MB문어는 도구를 써서 일을 해내는 모습이 관찰된 몇 안 되는 동물이다. 코코넛 껍데기 두 쪽을 바닥에서 들고 다니다가 위험을 느끼면 그 안으로 숨는 문어의 영상이 널리 알려져 있다.
은신 도구는 성능이 서로 다르다. 바다 바닥 여러 곳에 들고 다닐 수 있는 은신 도구가 흩어져 있다면, 조금 돌아가서 더 좋은 도구를 챙긴 다음 목적지로 향하는 편이 잡아먹히지 않을 확률을 높인다. 살아남을 확률이 가장 높은 경로를 계획하는 프로그램을 작성하라.
바다 바닥의 위치 n개와 위치 사이를 잇는 통로가 주어진다. 각 위치에는 포식자가 있거나 은신 도구가 있거나 둘 다 없다. 포식자의 탐지 능력은 0과 1 사이의 실수 p이고, 은신 도구의 보호력은 0과 1 사이의 실수 h이다. 보호력 h인 도구를 쓰는 문어가 탐지 능력 p인 포식자가 있는 위치에 머무르면, 포식자는 확률 max(0,p−h)로 문어를 잡아먹는다.
문어는 출발 위치 s에서 아무 도구도 없이 출발하므로 처음 보호력은 0이다. 통로를 따라 이동해 목표 위치 t에 도달해야 하며, 규칙은 다음과 같다.
각 판정은 서로 독립이다. 문어가 s에서 출발해 t까지 살아서 도달할 확률의 최댓값을 구하라.
첫 줄에 데이터 세트의 개수 K가 주어진다. K≥1이다. 이어서 데이터 세트 K개가 다음 형식으로 주어진다.
데이터 세트의 첫 줄에는 정수 네 개 n, m, s, t가 주어진다. 1≤n≤200은 위치의 개수, 0≤m≤n2은 통로의 개수, 1≤s,t≤n은 출발 위치와 목표 위치이다.
다음 줄에는 실수 n개 z1,z2,…,zn이 주어지고 각 zi는 −1 이상 1 이하이다. zi<0이면 위치 i에 보호력 −zi인 은신 도구가 있다. zi>0이면 위치 i에 탐지 능력 zi인 포식자가 있다. zi=0이면 위치 i에는 포식자도 은신 도구도 없다.
다음 m개 줄에는 통로가 하나씩 주어진다. j번째 줄의 정수 pj, qj는 1≤pj<qj≤n을 만족하고, 문어가 위치 pj에서 qj로, 그리고 qj에서 pj로 바로 이동할 수 있다는 뜻이다. 같은 통로가 두 번 이상 주어질 수 있다. s에서 t로 가는 방법은 항상 존재한다.
각 데이터 세트마다 먼저 Data Set x:를 한 줄에 출력한다. x는 데이터 세트의 번호이고 1부터 센다. 다음 줄에 문어가 위치 t까지 살아서 도달할 확률의 최댓값을 소수점 아래 넷째 자리에서 반올림해 출력한다. 소수점 아래는 정확히 네 자리를 적는다.
데이터 세트를 출력한 뒤에는 빈 줄을 하나 출력한다.