https://www.luogu.com.cn/record/108264335
代码
#include<bits/stdc++.h>
using namespace std;
const int N=301;
int e[N],ne[N],h[N],idx;
void add(int a,int b){
e[idx]=b;
ne[idx]=h[a];
h[a]=idx++;
}
int n,m;
int f[N][N],w[N];
int dfs(int u){
for(int i=h[u];i!=-1;i=ne[i]){
int s=e[i];
dfs(s);
for(int j=m-1;j;j--){
for(int k=0;k<=j;k++){
f[u][j]=max(f[u][j],f[s][k]+f[u][j-k]);
}
}
}
for(int i=m;i>=1;i--){
f[u][i]=f[u][i-1]+w[u];
}
}
int main()
{
memset(h,-1,sizeof h);
cin>>n>>m;
for(int i=1;i<=n;i++){
int p;
cin>>p>>w[i];
add(p,i);
}
m++;
dfs(0);
cout<<f[0][m];
return 0;
}