프로그래밍 팀

추천한 직원이 팀에 있어야 한다는 조건 아래 트리에서 정확히 k명을 골라 생산성 합을 급여 합으로 나눈 값을 최대로 만들고, 소수 셋째 자리까지 출력한다.

어려움8동적 계획법트리이분 탐색그리디아직 제출이 없습니다시간 제한3초메모리 제한512 MB

문제

UpCoder는 새 웹사이트를 만들 팀을 꾸리려 한다. 후보는 nn명이고 사원 번호는 1번부터 nn번까지다. CEO의 사원 번호는 0번이다. 각 후보는 자기보다 번호가 작은 사원의 추천을 받았다. 후보 한 명은 사원 번호 외에 연봉 ss, 기대 생산성 pp, 자신을 추천한 사원의 번호 rr로 나타낸다.

후보 nn명 중에서 정확히 kk명을 팀에 넣어야 한다. 팀의 총 가치는 팀원 생산성의 합을 팀원 연봉의 합으로 나눈 값이다. 어떤 후보를 팀에 넣으려면 그 후보를 추천한 사원도 팀에 있어야 한다. 추천한 사원이 CEO이면 이 조건은 이미 만족한다. 그래서 팀원 중 적어도 한 명은 CEO가 추천한 후보다. CEO는 경영을 맡으므로 뽑는 kk명에는 들어가지 않는다.

이 조건을 지키면서 만들 수 있는 팀의 최대 총 가치를 구하라.

입력

첫째 줄에 정수 kknn이 공백으로 구분되어 주어진다 (1kn25001 \le k \le n \le 2500). kk는 뽑아야 하는 팀원 수, nn은 후보 수다.

다음 nn개 줄에는 사원 한 명의 정보가 사원 1번부터 사원 nn번까지 순서대로 주어진다. 각 줄에는 정수 ss, pp, rr이 공백으로 구분되어 주어진다. ss는 연봉 (1s100001 \le s \le 10000), pp는 생산성 (1p100001 \le p \le 10000), rr은 이 후보를 추천한 사원의 번호다 (0r<i0 \le r < i, ii는 이 후보의 사원 번호).

출력

팀의 최대 총 가치를 소수점 아래 셋째 자리까지 한 줄에 출력한다. 정확한 값을 소수점 아래 넷째 자리에서 반올림하되, 넷째 자리 아래가 정확히 절반이면 올린다.