#include"bits/stdc++.h"
using namespace std;
#define ll long long
#define co cout<<
// stuff
const int maxn=2e5+1,maxm=501;
int n,m;
vector<ll>v[maxn];
int arr[maxn];
ll root=-1;
int values[maxn][maxm];
int mx[maxn];
void dfs(ll x,ll last){
for(auto i:v[x]){
if(i==last) continue;
dfs(i,x);
vector<pair<int,int>>added;
for(int j=mx[x];j>=0;j--){
for(int k=min(mx[i],m-j);k>=0;k--){
if(values[x][j]+values[i][k]>values[x][j+k]) added.push_back({j,k});
}
}
mx[x]+=mx[i];
mx[x]=min(mx[x],m);
for(auto [j,k]:added){
values[x][j+k]=max(values[x][j+k],values[x][j]+values[i][k]);
}
}
values[x][1]=max(values[x][1],arr[x]);
mx[x]=max(mx[x],1);
}
void solve(){
cin>>n>>m;
for(int i=1;i<=n;i++){
ll a;
cin>>a>>arr[i];
if(a==0){
root=i;
continue;
}
v[i].push_back(a);
v[a].push_back(i);
}
dfs(root,-1);
co values[root][m];
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int _=1;
// cin>>_;
while(_--) solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |