Submission #1234452

#TimeUsernameProblemLanguageResultExecution timeMemory
1234452ereringBiochips (IZhO12_biochips)C++20
100 / 100
516 ms403128 KiB
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define endl '\n'
//#define int long long
const int N=2e5+5,inf=1e9,MOD=1e9+7;
vector<int> ch[N];
int w[N],leafs[N],dp[N][505],m;
void dfs(int node){
   // cout<<node<<' '<<leafs[node]<<endl;
    for(auto i:ch[node]){
        dfs(i);
        for(int j=min(m,leafs[node]);j>=0;j--){
            for(int k=0;k<=min(m,leafs[i]) && j+k<=min(m,leafs[node]);k++){
                //if(node==2 && j+k==2 && dp[node][j]+dp[i][k]==300)cout<<j<<' '<<k<<' '<<dp[node][j]<<' '<<dp[i][k]<<' '<<i<<endl;
                dp[node][j+k]=max(dp[node][j+k],dp[node][j]+dp[i][k]);
            }
        }
    }
    dp[node][1]=max(dp[node][1],w[node]);
   // cout<<dp[node][1]<<' '<<dp[node][2]<<' '<<node<<endl;
}
void cnt(int node){
    for(auto i:ch[node]){
        cnt(i);
        leafs[node]+=leafs[i];
    }
    if(ch[node].size()==0)leafs[node]+=1;
}
signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    for(int i=0;i<N;i++){
        for(int j=1;j<505;j++)dp[i][j]=-inf;
    }
    int n; cin>>n>>m;
    int root;
    for(int i=1;i<=n;i++){
        int p,x; cin>>p>>x;
        if(p==0)root=i;
        w[i]=x;
        ch[p].pb(i);
    }
    cnt(root);
    dfs(root);
    cout<<dp[root][m];
}
#Verdict Execution timeMemoryGrader output
Fetching results...