바이오칩

값이 주어진 루트 트리에서 조상과 자손을 함께 고르지 않으면서 합이 가장 커지도록 정확히 M개 노드를 고합니다.

보통7동적 계획법트리아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

과학자들이 스스로 여러 개의 새로운 바이오칩으로 분열하는 바이오칩을 발견했다. 분열이 일어나면 부모 바이오칩은 사라진다. 바이오칩마다 자기 메모리 크기가 있고, 이 크기는 부모의 메모리 크기와 무관하다. 분열로 생긴 바이오칩은 그대로 사용해서 분열을 멈추거나, 같은 방식으로 계속 분열한다.

과학자들은 분열 과정을 원소가 NN개인 트리로 정리했고, 트리의 구조와 각 바이오칩의 메모리 크기를 모두 알고 있다.

트리에서 바이오칩을 정확히 MM개 골라 메모리 크기의 합을 최대로 만드는 프로그램을 작성하시오. 어떤 바이오칩을 고르면 그 조상과 자손은 하나도 고를 수 없다.

입력

첫째 줄에 트리의 원소 개수 NN과 골라야 하는 바이오칩의 개수 MM이 주어진다 (1N2000001 \le N \le 200000, 1M5001 \le M \le 500).

다음 NN개의 줄에는 음이 아닌 정수가 두 개씩 주어진다. 첫 번째 수는 트리에서 부모의 번호이고, 두 번째 수는 그 바이오칩의 메모리 크기 xx이다 (0x10000 \le x \le 1000). 바이오칩의 번호는 1부터 NN까지이고, 이 NN개의 줄 중 ii번째 줄이 번호가 ii인 바이오칩의 정보이다. 부모가 없는 바이오칩은 하나뿐이며, 그 바이오칩의 부모는 0으로 주어진다.

바이오칩을 MM개 고르는 방법은 항상 존재한다.

출력

고른 바이오칩 MM개의 메모리 크기 합의 최댓값을 한 줄에 출력한다.