没什么可说的。
模板题。
#include<bits/stdc++.h>
using namespace std;
#define N 1005
int first[N], Next[N], to[N], f[N][N], tot, n, m;
void add(int x, int y)
{
Next[++tot] = first[x];
first[x] = tot;
to[tot] = y;
return;
}
void dfs(int u)
{
for(int i = first[u]; i; i = Next[i])
{
int v = to[i];
dfs(v);
for(int j = m + 1; j >= 1; j--)
{
for(int k = 0; k < j; k++)
{
f[u][j] = max(f[u][j], f[v][k] + f[u][j - k]);
}
}
}
return;
}
int main()
{
ios::sync_with_stdio(false);
cin >> n >> m;
int u, v;
for(int i = 1; i <= n; i++)
{
cin >> u >> v;
add(u, i);
f[i][1] = v;
}
dfs(0);
cout << f[0][m + 1];
return 0;
}