로미오와 줄리엣
시간 제한2초메모리 제한512 MB
각 사람이 줄리엣에게 전하는 죄책감과 로미오에게 전하는 고통의 최대 전달 곱을 구해 사건마다 가중치를 매기고, 최대 k개의 사건을 지워 총 죄책감을 최소로 만든다.
문제
로미오와 줄리엣의 비극은 몬터규가와 캐퓰릿가의 오랜 반목에서 시작한다. 이 문제에서는 과거의 사건 몇 개를 지웠을 때 두 사람 사이의 앙금이 얼마나 줄어드는지를 계산한다.
오랜 반목이 남기는 앙금은 대개 연좌에서 온다. 누군가의 아들이거나 이모이거나 친구라는 이유만으로, 그 사람이 내 어머니나 사촌에게 저지른 잘못의 죄책감을 함께 짊어진다. 이를 사건과 관계로 모형화한다.
사건은 사람 가 사람 에게 나쁜 짓을 한 일이고, 피해량이 붙는다. 가 를 살해했다면 피해량이 , 사업에서 속였다면 인 식이다. 과거에 일어난 모든 사건의 당사자와 피해량이 입력으로 주어진다.
관계는 한 사람의 죄책감과 아픔이 다른 사람에게 얼마나 옮겨가는지를 나타낸다. 관계 는 가 누군가에게 나쁜 짓을 했을 때 가 의 죄책감을 의 비율만큼 물려받고, 누군가가 에게 나쁜 짓을 했을 때 가 의 아픔을 의 비율만큼 물려받는다는 뜻이다. 에서 로 가는 비율과 에서 로 가는 비율은 서로 다를 수 있다.
죄책감과 아픔은 사람을 여러 번 거쳐 전달되고, 사슬을 따라가면서 비율이 곱해진다. 와 가 친구이고 와 가 친구이며 두 우정이 각각 를 전달하면 는 의 죄책감을 의 비율만큼 물려받는다. 같은 두 사람을 잇는 사슬이 여러 개여도 앙금이 여러 번 쌓이지는 않는다. 곱이 가장 큰 사슬 하나만 센다.
사람 은 언제나 줄리엣이고 사람 는 언제나 로미오다. 사건 가 줄리엣에게서 로미오에게로 옮기는 앙금은 이다. 는 의 죄책감을 줄리엣에게 전달하는 사슬들의 비율 곱 중 가장 큰 값이고, 는 의 아픔을 로미오에게 전달하는 사슬들의 비율 곱 중 가장 큰 값이다. 가 줄리엣이면 이고 가 로미오면 이다. 그런 사슬이 하나도 없으면 그 값은 이다.
줄리엣에게서 로미오에게로 가는 전체 앙금은 남아 있는 모든 사건의 앙금을 더한 값이다. 줄리엣이 과거의 사건을 최대 개까지 지울 수 있을 때, 전체 앙금의 최솟값을 구한다.
예를 들어 줄리엣의 사촌 티볼트가 로미오의 절친한 친구 머큐시오를 죽였고, 줄리엣의 아버지가 로미오의 아버지를 사업에서 속였다고 하자. 사촌은 양쪽으로 , 절친한 친구는 양쪽으로 , 아버지에서 자식으로는 를 전달하며, 살해의 피해량은 , 사업 사기의 피해량은 다. 그러면 줄리엣에게서 로미오에게로 가는 앙금은 다. 티볼트의 살해를 지우면 앙금은 로 줄어든다. 머큐시오가 벤볼리오와도 친구이고 벤볼리오가 로미오와 친구여도 이 따로 더해지지는 않는다.
입력
첫째 줄에 데이터 집합의 개수 가 주어진다. ()
이어서 개의 데이터 집합이 차례로 주어진다. 각 데이터 집합의 첫째 줄에는 네 정수 , , , 가 공백으로 구분되어 주어진다. 은 등장인물 수로 이고, 사람 은 줄리엣, 사람 는 로미오다. 은 관계의 개수로 이고, 은 과거에 일어난 나쁜 사건의 개수로 이며, 는 줄리엣이 지울 수 있는 사건의 최대 개수로 이다.
다음 개의 줄에는 관계가 한 줄에 하나씩 , , 순서로 주어진다. 이고, 는 에서 로 전달되는 비율로 인 소수다. 같은 순서쌍 가 두 번 나오지는 않지만, 와 가 함께 나올 수는 있다.
다음 개의 줄에는 나쁜 사건이 한 줄에 하나씩 , , 순서로 주어진다. 이고, 는 가 에게 입힌 피해량으로 인 소수다. 같은 순서쌍이 여러 번 나올 수 있다.
출력
각 데이터 집합마다 먼저 Data Set x:를 한 줄에 출력한다. 는 데이터 집합의 번호이고 부터 시작한다. 다음 줄에 줄리엣이 사건을 최대 개 지워서 만들 수 있는, 줄리엣에게서 로미오에게로 가는 앙금의 최솟값을 소수점 아래 둘째 자리까지 반올림해 출력한다. 각 데이터 집합 뒤에는 빈 줄을 하나 출력한다.
입력 자료는 정답이 소수 둘째 자리 두 값의 정확히 중간에 놓이지 않도록 만들어져 있어서, 반올림 결과가 하나로 정해진다.