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...