#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef pair<int,int> PII;
const int N = 1e6;
const int INF = 0x7f7f7f7f;
int n,m;
int e[2 * N + 5],ne[2 * N + 5],h[2 * N + 5],idx = 0;
int dp[1500][1500];
void add1(int a,int b) {
e[++ idx] = b;
ne[idx] = h[a];
h[a] = idx;
}
void add2(int a,int b) {
e[idx] = b;
ne[idx] = h[a];
h[a] = idx ++;
}
void dfs(int u) {
for (int k = h[u];k;k = ne[k]) {
int v = e[k];
dfs(v);
for (int i = m + 1;i >= 1;i --)
for (int j = 0;j <= i - 1;j ++)
dp[u][i] = max(dp[u][i],dp[v][j] + dp[u][i - j]);
}
}
void solve() {
cin >> n >> m;
for (int i = 1;i <= n;i ++) {
int u,v;
cin >> u >> v;
dp[i][1] = v;
add1(u,i);
}
dfs(0);
cout << dp[0][m + 1] << endl;
}
signed main() {
std::ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int T = 1;//cin >> T;
while (T --) solve();
}
为什么用当中的add1可以可以过add2就过不了了