作者:
navystar
,
2023-05-27 09:53:56
,
所有人可见
,
阅读 5
//这里填你的代码^^
#include <bits/stdc++.h>
using namespace std;
const int N = 320;
int h[N], e[N], ne[N], w[N], idx;
int n, m, f[N][N];
inline void dfs(int u)
{
for (int i = h[u]; ~i; i = ne[i])
{
int j = e[i];
dfs(j);
for (int k = m; k >= 0; k -- )
for (int s = 1; s <= k; s ++ )
if (f[u][k] < f[u][k - s] + f[j][s])
f[u][k] = f[u][k - s] + f[j][s];
}
for (int i = m; i >= 1; i -- )
f[u][i] = f[u][i - 1] + w[u];
}
inline void solve()
{
cin >> n >> m;
memset(h, -1, sizeof h);
for (int i = 1; i <= n; i ++ )
{
int a, b;
cin >> a >> b;
e[idx] = i, ne[idx] = h[a], h[a] = idx ++;
w[i] = b;
}
m ++;
dfs(0);
cout << f[0][m] << endl;
}
int main()
{
cin.tie(nullptr) -> sync_with_stdio(0);
solve();
return 0;
}
//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~