#include <bits/stdc++.h>
using namespace std;
int f[205][205];
int n,m;
int a[205],b[205];
vector <int> v[205];
void dfs(int x){
for(int i=0;i<v[x].size();i++){
int u=v[x][i];
dfs(u);
for(int j=m;j>=2;j--){
int jj=j+(x==0);
for(int k=1;k<jj;k++){
f[x][j]=max(f[x][j],f[x][j-k]+f[u][k]);
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>b[i]>>a[i];
v[b[i]].push_back(i);
f[i][1]=a[i];
}
dfs(0);
cout<<f[0][m];
return 0;
}
样例1WA了
你好,改一下dfs那个for循环的判断条件,我把j>=1改成了>=0就过了
哦写错了,是j>=2改成j>=1()
是j>=2改成j>=1(),直接通