Submission #1208394

#TimeUsernameProblemLanguageResultExecution timeMemory
1208394m5588ohammedBiochips (IZhO12_biochips)C++20
100 / 100
630 ms398012 KiB
#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define mod 1000000007
int dp[200001][501],leafs[200001],n,m,arr[200001],rt;
vector <int> v[200001]; 
void build(int i){
    if(v[i].size()==0){
        leafs[i]=1;
        return;
    }
    for(int j:v[i]){
        build(j);
        leafs[i]+=leafs[j];
    }
    return;
}
void calc(int i){
    for(int k=0;k<=m;k++) dp[i][k]=-1e9;
    dp[i][0]=0;
    for(int j:v[i]){
        calc(j);
        for(int k=min(m,leafs[i]);k>=0;k--){
            for(int p=0;p<=min(k,leafs[j]);p++){
                dp[i][k]=max(dp[i][k],dp[i][k-p]+dp[j][p]);
                if(dp[i][k]<0) dp[i][k]=-1e9;
            }
        }
        // if(i==2){
        //     cout<<j<<": "<<endl;
        //     for(int j=0;j<=leafs[i];j++) cout<<dp[i][j]<<" ";
        //     cout<<endl;
        // }

    }
    // if(i==1){
    //     cout<<i<<": "<<endl;
    //     for(int j=0;j<=m;j++) cout<<dp[i][j]<<" ";
    //     cout<<endl;
    // }
    dp[i][1]=max(dp[i][1],arr[i]);
    return;
}
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        int p;
        cin>>p>>arr[i];
        if(p==0) rt=i;
        else v[p].push_back(i);
    }
    build(rt);
    calc(rt);
    cout<<dp[rt][m]<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...