#include<bits/stdc++.h>
using namespace std;
int n,k,gg,a[305];
map<int,int>f;
std::vector<int>g[305];
int dp(int u,int k,int r){
if(f[u*1000+k*50+r]!=0)
return f[u*1000+k*50+r];
if(g[u].size()==0){
if(!k)
return 0;
return f[u*1000+k*50+r]=a[u];
}
if(!k)
return 0;
if(g[u].size()==1)
return f[u*1000+k*50+r]=a[u]+dp(g[u][0],k-1,0);
int ans=0;
for(int i=0;i<k;i++){
ans=std::max(ans,dp(g[u][r],i,0)+dp(u,k-i,r+1));
}
return f[u*1000+k*50+r]=ans;
}
int main(){
std::cin>>n>>k;
for(int i=1;i<=n;i++){
std::cin>>gg>>a[i];
g[gg].push_back(i);
}
k++;
std::cout<<dp(0,k,0);
return 0;
}
QWQ,P2014的树形DP(正好用的也是c++14)