Submission #702506

#TimeUsernameProblemLanguageResultExecution timeMemory
702506Darren0724Biochips (IZhO12_biochips)C++17
100 / 100
1242 ms406936 KiB
#pragma GCC optimize("Ofast","O3","unroll-loops") #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(N,vector<int>(501)); 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=0;j<=min(leaf[u],i);j++){ dp[k][i]=max(dp[k][i],dp[u][j]+dp[k][i-j]); } } } dp[k][1]=max(dp[k][1],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[root][k]<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...