#include<bits/stdc++.h>
using namespace std;
int n,m,s[1001],f[1001][1001];
vector<int> G[1001];
void dfs(int u)
{
f[u][0]=0;
for(int i=0;i<G[u].size();i++)
{
int v=G[u][i];
dfs(v);
for(int t=m;t;t--)
{
for(int j=t;j;j--)
{
f[u][t]=max(f[u][t],f[u][t-j]+f[v][j]);
}
}
}
if(u)
for(int i=m;i;i--)
{
f[u][i]=f[u][i-1]+s[u];
}
}
int main()
{
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
int u;
cin>>u>>s[i];
G[u].push_back(i);
}
memset(f,0xcf,sizeof(f));
dfs(0);
cout<<f[0][m];
}
第15行的j为什么能取到t呢?如果取到了,岂不是u去不到了吗?