# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
425251 | Runtime_error_ | Biochips (IZhO12_biochips) | C++14 | 586 ms | 21368 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
const int N = 2e5+9,M = 209;
int n,m,root,val[N];
vector<int> adj[N];
vector<int> dp[N];
vector<int> merge(vector<int> a,vector<int> b){
int sza = a.size(),szb = b.size();
vector<int> ret(min(m,sza+szb)+1,0);
for(int i=0;i<sza;i++)
for(int j=0;j<szb;j++)
if(i+j <= m)
ret[i+j] = max(ret[i+j],a[i]+b[j]);
return ret;
}
void dfs(int u,int p){
dp[u].resize(1,0);
for(auto v:adj[u]){
if(v == p)continue;
dfs(v,u);
dp[u] = merge(dp[u],dp[v]);
}
if(dp[u].size() == 1)
dp[u].pb(0);
dp[u][1] = max(dp[u][1],val[u]);
// cout<<u<<" ::";
// for(int i=0;i<dp[u].size();i++)
// cout<<dp[u][i]<<" ";
// cout<<endl;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
int par;
scanf("%d%d",&par,val+i);
if(par != 0)
adj[par].pb(i);
else
root = i;
}
dfs(root,0);
cout<<dp[root][m]<<endl;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |