닌자 배치

시간 제한1초메모리 제한256 MB

요약
관리자 한 명과 그 관리자의 부분 트리에서 급여 합이 예산을 넘지 않도록 닌자를 골라, 배정 인원과 관리자의 리더십을 곱한 값을 최대로 만든다.
난이도

어려움10점 중 8점

유형
트리, DFS, 힙, 그리디
정답자
아직 제출이 없습니다

문제

한 닌자 조직은 고객에게 닌자들을 배치하고, 닌자들이 그 고객을 위해 한 일에 대해 보수를 받는다.

이 조직에는 마스터라 불리는 닌자가 한 명 있고, 마스터를 제외한 모든 닌자는 정확히 한 명의 보스를 모신다. 닌자들의 비밀을 지키고 지휘 체계를 유지하기 위해, 오직 보스만이 자신의 부하에게 명령을 내릴 수 있으며, 그 외의 사람이 명령을 전달하는 것은 금지된다.

당신은 조직에서 닌자 몇 명을 모아 한 고객에게 배치하려고 한다. 배치된 각 닌자에게는 고정된 월급을 주며, 배치된 닌자들의 월급 총합은 주어진 예산을 넘을 수 없다. 명령을 전달하기 위해 당신은 닌자 한 명을 매니저로 정하고, 그 매니저는 배치된 모든 닌자에게 명령을 아래로 전달할 수 있어야 한다. 명령은 지휘 체계를 따라 아래로 내려가므로, 배치되는 닌자는 매니저 자신이거나 매니저의 (직접 또는 간접) 부하여야 한다. 명령은 배치되지 않은 닌자를 거쳐 전달될 수도 있다. 매니저 자신은 배치될 수도, 배치되지 않을 수도 있으며, 배치되지 않은 닌자에게는 월급을 주지 않는다.

당신은 예산 안에서 고객의 만족도를 최대로 하려고 한다. 고객의 만족도는 배치된 닌자의 총 수와 매니저의 리더십 레벨의 곱이다. 각 닌자의 리더십 레벨은 고정되어 있다.

각 닌자 ii (1≤i≤N1 \le i \le N)에 대해 보스 BiB_i, 월급 CiC_i, 리더십 레벨 LiL_i가 주어지고, 월급으로 쓸 수 있는 예산 MM이 주어질 때, 매니저와 배치할 닌자를 조건에 맞게 골랐을 때 고객 만족도의 최댓값을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 두 자연수 NN과 MM이 공백을 사이에 두고 주어진다. NN은 닌자의 수, MM은 총 예산이다.

다음 NN개의 줄에는 각 닌자의 정보가 주어진다. i+1i+1번째 줄에는 세 정수 BiB_i, CiC_i, LiL_i가 공백을 사이에 두고 주어진다. BiB_i는 닌자 ii의 보스, CiC_i는 닌자 ii의 월급, LiL_i는 닌자 ii의 리더십 레벨이다. Bi=0B_i = 0이면 닌자 ii는 마스터이다. 항상 Bi<iB_i < i이므로, 각 닌자의 보스 번호는 그 닌자의 번호보다 작다.

출력

고객 만족도의 최댓값을 출력한다.

제한

  • 1≤N≤100,0001 \le N \le 100{,}000
  • 1≤M≤1,000,000,0001 \le M \le 1{,}000{,}000{,}000
  • 0≤Bi<i0 \le B_i < i
  • 1≤Ci≤M1 \le C_i \le M
  • 1≤Li≤1,000,000,0001 \le L_i \le 1{,}000{,}000{,}000

힌트

예제에서 닌자 11을 매니저로 정하고 닌자 33과 44를 배치하면, 월급의 합은 2+2=42 + 2 = 4로 예산 44를 넘지 않는다. 배치된 닌자가 22명이고 매니저의 리더십 레벨이 33이므로, 고객의 만족도는 2×3=62 \times 3 = 6이며, 이 값이 최댓값이다.

예제1

  1. 예제 1

    입력
    5 4
    0 3 3
    1 3 5
    2 2 2
    1 2 4
    2 3 1
    
    예상 출력
    6