#include<iostream>
#include<cstdio>
#define maxn 1000
using namespace std;
int t,m,cnt;
int head[maxn];
int a[maxn][maxn];
struct edge
{
int net,to;
}each[maxn];
void add(int a,int b)
{
each[++cnt].net=head[a];
each[cnt].to=b;
head[a]=cnt;
}
void dp(int now)
{ for(int i=head[now];i;i=each[now].net)
{int to=each[now].to;
dp(to);
for(int l=m+1;l>=1;l--)
{
for(int k=0;k<l;k++)
{
a[i][i]=max(a[i][l],a[to][k]+a[i][l-k]);}} }
}
int main()
{
cin>>t;cin>>m;
for(int i=1;i<=t;i++)
{
int fa;cin>>fa>>a[i][1];
add(fa,i);
}
dp(0);
printf("%d\n",a[0][m+1]);
return 0;
}
一直爆0,几乎和题解一样了