Submission #881183

#TimeUsernameProblemLanguageResultExecution timeMemory
881183alexddBiochips (IZhO12_biochips)C++17
100 / 100
536 ms402136 KiB
#include<iostream> #include<vector> using namespace std; int n,m,root; vector<int> con[200005]; int a[200005]; int siz[200005]; int dp[200005][505]; void dfs(int nod) { for(auto adj:con[nod]) { dfs(adj); for(int i=min(m,siz[nod]+siz[adj]);i>0;i--) { for(int j=max(0,i-siz[nod]);j<=min(siz[adj],i);j++) dp[nod][i] = max(dp[nod][i], dp[nod][i-j] + dp[adj][j]); } siz[nod]=min(siz[nod]+siz[adj],m); } dp[nod][1] = max(dp[nod][1], a[nod]); siz[nod] = max(siz[nod], 1); } signed main() { ios_base::sync_with_stdio(0);cin.tie(0); cin>>n>>m; int p; for(int i=1;i<=n;i++) { cin>>p>>a[i]; if(p!=0) con[p].push_back(i); else root = i; } dfs(root); cout<<dp[root][m]; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...