Majstor

선행 조건을 지키며 일부 작업을 골라 총 보수 나누기 총 시간의 몫을 최대로 만드는 비율을 구한다.

보통7그리디정렬그래프이분 탐색면접 대비아직 제출이 없습니다시간 제한3초메모리 제한128 MB

문제

수리공 Rajko는 일 NN개를 해야 한다. 일은 서로 독립이 아니다. 각 일에는 그 일을 시작하기 전에 반드시 끝나 있어야 하는 일의 목록이 있다. 또 일마다 Rajko가 그 일을 끝내는 데 걸리는 시간과, 끝냈을 때 받는 금액이 쿠나 단위로 정해져 있다.

Rajko는 게을러서 몇 개의 일만 골라 하기로 했다. 고르는 기준은 시급이 가장 높아지는 것이다. 그다음에는 일을 그만두고 번 돈을 들고 휴가를 떠난다.

Rajko는 자기가 한 일의 보수를 모두 더한 값을 쓴 시간의 합으로 나누고 나머지를 버려서 시급을 구한다. Rajko는 적어도 일 한 개는 한다.

다음 네 개의 일을 보자.

일 번호보수(쿠나)소요 시간(h)선행 조건
15002없음
22001없음
327511, 2
460022

Rajko가 네 일을 모두 하면 시급은 (500+200+275+600)/(2+1+1+2)=262(500 + 200 + 275 + 600) / (2 + 1 + 1 + 2) = 262 쿠나다. 2번과 4번만 하면 시급이 (200+600)/(1+2)=266(200 + 600) / (1 + 2) = 266 쿠나이고, 선행 조건을 지키면서 이보다 높은 시급을 얻는 방법은 없다. 2번, 3번, 4번만 하면 시급이 268 쿠나가 되지만, 1번을 끝내지 않고서는 3번을 할 수 없다.

가장 높은 시급을 구하는 프로그램을 작성하시오.

입력

첫 줄에 일의 개수 NN (1N1001 \le N \le 100)이 주어진다.

다음 NN개의 줄에는 일 하나의 정보가 주어진다. ii번째 일의 정보는 정수 HiH_i, TiT_i, PiP_i (1Hi10001 \le H_i \le 1000, 1Ti101 \le T_i \le 10, 0Pi<N0 \le P_i < N)로 시작한다. 각각 그 일을 끝냈을 때 받는 보수(쿠나), 그 일에 걸리는 시간, ii번째 일보다 먼저 끝나야 하는 일의 개수다. 이어서 그 일의 번호가 PiP_i개 주어진다.

선행 조건은 항상 모든 일을 끝낼 수 있도록 주어진다.

출력

첫 줄에 가능한 가장 높은 시급을 쿠나 단위로 출력한다. 시급은 보수의 합을 시간의 합으로 나눈 뒤 나머지를 버린 값이므로 정수다.