#include <bits/stdc++.h>
#define ar array
//#define int long long
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
const int mod = 1e9 + 7;
const ll inf = 1e18;
const int N = 2e5 + 5;
int dp[N][505];
int n, m, in[N], out[N], timer = 1, root, p[N], a[N];
vector<int> g[N];
void dfs(int u) {
dp[u][0] = 0;
for(int v : g[u]) {
dfs(v);
for(int i=m; i>=0; i--) {
for(int j=m-i; j>=0; j--) {
if(dp[u][i] >= 0 && dp[v][j] >= 0)
dp[u][i+j] = max(dp[u][i], dp[v][j]);
}
}
}
dp[u][1] = max(dp[u][1], a[u]);
}
signed main() {
cin >> n >> m;
for(int i=1; i<=n; i++) {
for(int j=0; j<=m; j++) dp[i][j] = -1e4;
cin >> p[i] >> a[i];
if(!p[i]) root = i;
else g[p[i]].push_back(i);
}
dfs(root);
cout << dp[root][m] << '\n';
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |