만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

바이오칩

시간 제한2초메모리 제한512 MB

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

보통10점 중 7점

유형
동적 계획법, 트리
정답자
아직 제출이 없습니다

문제

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

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

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

입력

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

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

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

출력

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

예제2

  1. 예제 1

    입력
    7 3
    2 100
    0 1000
    2 150
    3 100
    3 5
    5 100
    2 50
    
    예상 출력
    300
    
  2. 예제 2

    입력
    5 2
    0 0
    1 100
    2 99
    2 98
    1 50
    
    예상 출력
    197