#include #include #include using std::cin; using std::cout; const char endl = '\n'; const int N = 305; int n, m, s[N], f[N][N]; std::vector g[N]; void dfs(int u) { f[u][0] = 0; for (int v : g[u]) { dfs(v); for (int i = m; i >= 0; i--) { for (int j = i; j >= 0; j--) { f[u][i] = std::max(f[u][i], f[u][i - j] + f[v][j]); } } } if (u) { for (int i = m; i; i--) { f[u][i] = f[u][i - 1] + s[u]; } } } int main() { std::ios::sync_with_stdio(false); memset(f, 0xcf, sizeof(f)); cin >> n >> m; for (int i = 1, x; i <= n; i++) { cin >> x >> s[i]; g[x].push_back(i); } dfs(0); cout << f[0][m] << endl; return 0; }