Submission #1170228

#TimeUsernameProblemLanguageResultExecution timeMemory
1170228mnbvcxz123Biochips (IZhO12_biochips)C++20
100 / 100
524 ms401180 KiB
#include<bits/stdc++.h>
using namespace std;
using ll=long long;

constexpr int N=2e5+5;
constexpr int K=505;

int n,k;
vector<int>g[N];
int a[N],sz[N];
int dp[N][K];

void dfs(int u){
    sz[u]=1;
    for(const int&v:g[u]){
        dfs(v);
        for(int i=sz[u];i>=0;--i)
            for(int j=min(sz[v],k-i);j>=0;--j)
                dp[u][i+j]=max(dp[u][i+j],dp[v][j]+dp[u][i]);
        sz[u]+=sz[v];
        if(sz[u]>=k)sz[u]=k;
    }
    dp[u][1]=max(dp[u][1],a[u]);
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    cin>>n>>k;
    for(int i=0;i<=n;++i)
        for(int j=0;j<=k;++j)dp[i][j]=-1e9;
    int root=0;
    for(int i=1,j;i<=n;++i){
        cin>>j>>a[i];
        if(j)g[j].push_back(i);
        else root=i;
        dp[i][0]=0;
    }
    dfs(root);
    cout<<dp[root][k]<<'\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...