rt,蒟蒻调了半天qwq
# include <iostream>
# include <vector>
using namespace std;
vector<int> son[1145];
int n,m,score[1145],dp[1145][1145];
void dfs(int idx){
for (int s = 0;s < son[idx].size();s++){
dfs(son[idx][s]);
for (int npck = m;npck > 0;npck--){
for (int pck = 0;pck < npck;pck++){
dp[idx][npck] = \
max(dp[idx][npck],\
dp[idx][npck-pck] + dp[son[idx][s]][pck]);
}
}
}
}int main(){
cin >> n >> m;
m++;
for (int i = 1;i <= n;i++){
int fa; cin >> fa >> score[i];
dp[i][1] = score[i];
son[fa].push_back(i);
if (fa != 0) son[0].push_back(i);
}dfs(0);
cout << dp[0][m];
return 0;
}