Submission #702504

#TimeUsernameProblemLanguageResultExecution timeMemory
702504Darren0724Biochips (IZhO12_biochips)C++17
80 / 100
2100 ms401872 KiB
//#pragma GCC optimize("Ofast","O3") //#pragma GCC target("avx2") #include<bits/stdc++.h> using namespace std; const int N=200000; int n,k; vector<int> v(N); vector<vector<int>> adj(N); vector<vector<int>> dp(501,(vector<int>(N))); vector<int> leaf(N); void dfs(int k){ if(adj[k].size()==0){ leaf[k]=1; } for(int u:adj[k]){ dfs(u); leaf[k]+=leaf[u]; for(int i=min(leaf[k],500);i>0;i--){ for(int j=1;j<=min(leaf[u],i);j++){ dp[i][k]=max(dp[i][k],dp[j][u]+dp[i-j][k]); } } } dp[1][k]=max(dp[1][k],v[k]); return; } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int root=0; cin>>n>>k; for(int i=0;i<n;i++){ int p;cin>>p;p--; if(p!=-1){ adj[p].push_back(i); } else{ root=i; } cin>>v[i]; } dfs(root); cout<<dp[k][root]<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...