Submission #717445

#TimeUsernameProblemLanguageResultExecution timeMemory
717445Ahmed57Biochips (IZhO12_biochips)C++14
100 / 100
1574 ms416212 KiB
#include <bits/stdc++.h> using namespace std; int en[200001]; vector<int> adj[200001]; int cost[200001]; int n,m;int timer = 0; vector<int> euler; void dfs(int i,int pr){ ++timer; euler.push_back(i); for(auto j:adj[i]){ if(j==pr)continue; dfs(j,i); } en[i] = timer; } int dp[200001][501]; int solve(int i,int rem){ if(i==n)return (rem==0?0:-1e9); if(dp[i][rem]!=-1)return dp[i][rem]; int c1 = solve(i+1,rem); if(rem)c1 = max(c1,solve(en[euler[i]],rem-1)+cost[euler[i]]); return dp[i][rem] = c1; } signed main(){ ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); cin>>n>>m; int ro = 0; for(int i = 0;i<n;i++){ int a,b; cin>>a>>b; cost[i+1] = b; if(a==0)ro = i+1; else{ adj[a].push_back(i+1); adj[i+1].push_back(a); } } dfs(ro,0); memset(dp,-1,sizeof dp); cout<<solve(0,m)<<"\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...