로미오와 줄리엣

각 사람이 줄리엣에게 전하는 죄책감과 로미오에게 전하는 고통의 최대 전달 곱을 구해 사건마다 가중치를 매기고, 최대 k개의 사건을 지워 총 죄책감을 최소로 만든다.

어려움8그래프최단 경로그리디정렬아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

로미오와 줄리엣의 비극은 몬터규가와 캐퓰릿가의 오랜 반목에서 시작한다. 이 문제에서는 과거의 사건 몇 개를 지웠을 때 두 사람 사이의 앙금이 얼마나 줄어드는지를 계산한다.

오랜 반목이 남기는 앙금은 대개 연좌에서 온다. 누군가의 아들이거나 이모이거나 친구라는 이유만으로, 그 사람이 내 어머니나 사촌에게 저지른 잘못의 죄책감을 함께 짊어진다. 이를 사건과 관계로 모형화한다.

사건은 사람 AA가 사람 BB에게 나쁜 짓을 한 일이고, 피해량이 붙는다. AABB를 살해했다면 피해량이 100100, 사업에서 속였다면 55인 식이다. 과거에 일어난 모든 사건의 당사자와 피해량이 입력으로 주어진다.

관계는 한 사람의 죄책감과 아픔이 다른 사람에게 얼마나 옮겨가는지를 나타낸다. 관계 (u,v,p)(u, v, p)uu가 누군가에게 나쁜 짓을 했을 때 vvuu의 죄책감을 pp의 비율만큼 물려받고, 누군가가 uu에게 나쁜 짓을 했을 때 vvuu의 아픔을 pp의 비율만큼 물려받는다는 뜻이다. uu에서 vv로 가는 비율과 vv에서 uu로 가는 비율은 서로 다를 수 있다.

죄책감과 아픔은 사람을 여러 번 거쳐 전달되고, 사슬을 따라가면서 비율이 곱해진다. AABB가 친구이고 BBCC가 친구이며 두 우정이 각각 0.50.5를 전달하면 CCAA의 죄책감을 0.250.25의 비율만큼 물려받는다. 같은 두 사람을 잇는 사슬이 여러 개여도 앙금이 여러 번 쌓이지는 않는다. 곱이 가장 큰 사슬 하나만 센다.

사람 11은 언제나 줄리엣이고 사람 22는 언제나 로미오다. 사건 (a,b,d)(a, b, d)가 줄리엣에게서 로미오에게로 옮기는 앙금은 G(a)×P(b)×dG(a) \times P(b) \times d이다. G(a)G(a)aa의 죄책감을 줄리엣에게 전달하는 사슬들의 비율 곱 중 가장 큰 값이고, P(b)P(b)bb의 아픔을 로미오에게 전달하는 사슬들의 비율 곱 중 가장 큰 값이다. aa가 줄리엣이면 G(a)=1G(a) = 1이고 bb가 로미오면 P(b)=1P(b) = 1이다. 그런 사슬이 하나도 없으면 그 값은 00이다.

줄리엣에게서 로미오에게로 가는 전체 앙금은 남아 있는 모든 사건의 앙금을 더한 값이다. 줄리엣이 과거의 사건을 최대 kk개까지 지울 수 있을 때, 전체 앙금의 최솟값을 구한다.

예를 들어 줄리엣의 사촌 티볼트가 로미오의 절친한 친구 머큐시오를 죽였고, 줄리엣의 아버지가 로미오의 아버지를 사업에서 속였다고 하자. 사촌은 양쪽으로 0.40.4, 절친한 친구는 양쪽으로 0.80.8, 아버지에서 자식으로는 0.90.9를 전달하며, 살해의 피해량은 100100, 사업 사기의 피해량은 55다. 그러면 줄리엣에게서 로미오에게로 가는 앙금은 0.4×0.8×100+0.9×0.9×5=36.050.4 \times 0.8 \times 100 + 0.9 \times 0.9 \times 5 = 36.05다. 티볼트의 살해를 지우면 앙금은 4.054.05로 줄어든다. 머큐시오가 벤볼리오와도 친구이고 벤볼리오가 로미오와 친구여도 0.4×0.8×0.8×1000.4 \times 0.8 \times 0.8 \times 100이 따로 더해지지는 않는다.

입력

첫째 줄에 데이터 집합의 개수 KK가 주어진다. (1K201 \le K \le 20)

이어서 KK개의 데이터 집합이 차례로 주어진다. 각 데이터 집합의 첫째 줄에는 네 정수 nn, rr, mm, kk가 공백으로 구분되어 주어진다. nn은 등장인물 수로 2n1002 \le n \le 100이고, 사람 11은 줄리엣, 사람 22는 로미오다. rr은 관계의 개수로 0rn20 \le r \le n^2이고, mm은 과거에 일어난 나쁜 사건의 개수로 0m100000 \le m \le 10000이며, kk는 줄리엣이 지울 수 있는 사건의 최대 개수로 0km0 \le k \le m이다.

다음 rr개의 줄에는 관계가 한 줄에 하나씩 uiu_i, viv_i, pip_i 순서로 주어진다. 1ui,vin1 \le u_i, v_i \le n이고, pip_iuiu_i에서 viv_i로 전달되는 비율로 0pi10 \le p_i \le 1인 소수다. 같은 순서쌍 (ui,vi)(u_i, v_i)가 두 번 나오지는 않지만, (ui,vi)(u_i, v_i)(vi,ui)(v_i, u_i)가 함께 나올 수는 있다.

다음 mm개의 줄에는 나쁜 사건이 한 줄에 하나씩 uju_j, vjv_j, djd_j 순서로 주어진다. 1uj,vjn1 \le u_j, v_j \le n이고, djd_juju_jvjv_j에게 입힌 피해량으로 0dj1040 \le d_j \le 10^4인 소수다. 같은 순서쌍이 여러 번 나올 수 있다.

출력

각 데이터 집합마다 먼저 Data Set x:를 한 줄에 출력한다. xx는 데이터 집합의 번호이고 11부터 시작한다. 다음 줄에 줄리엣이 사건을 최대 kk개 지워서 만들 수 있는, 줄리엣에게서 로미오에게로 가는 앙금의 최솟값을 소수점 아래 둘째 자리까지 반올림해 출력한다. 각 데이터 집합 뒤에는 빈 줄을 하나 출력한다.

입력 자료는 정답이 소수 둘째 자리 두 값의 정확히 중간에 놓이지 않도록 만들어져 있어서, 반올림 결과가 하나로 정해진다.