Submission #1294049

#TimeUsernameProblemLanguageResultExecution timeMemory
1294049hmms127Biochips (IZhO12_biochips)C++20
100 / 100
336 ms18944 KiB
#include<bits/stdc++.h> using namespace std; #define f1(n) for(int i=0;i<n;i++) #define f2(m,n,q) for(int i=m;i<n;i+=q) #define f4(m,n,q) for(int j=m;j<n;j+=q) #define int long long const int N=2e5+5,inf=1e18; int n,m,w[N];vector<int>g[N],dp[N]; void dfs(int u){ dp[u]=vector<int>(1,0); int s=0; for(int v:g[u]){ dfs(v); int sv=dp[v].size(),nu=min(m,s+sv); vector<int>nx(nu+1,-inf); f2(0,s+1,1){ if(dp[u][i]<-inf)continue; f4(0,sv,1){ if(dp[v][j]<-inf||i+j>m)continue; nx[i+j]=max(nx[i+j],dp[u][i]+dp[v][j]); } } dp[u]=nx; s=nu; dp[v].clear(); } if(dp[u].size()<2)dp[u].resize(2,-inf); dp[u][1]=max(dp[u][1],w[u]); if(dp[u].size()>m+1)dp[u].resize(m+1); } signed main(){ cin>>n>>m; int r=1; f2(1,n+1,1){ int p;cin>>p>>w[i]; if(p==0){r=i;continue;} g[p].push_back(i); } dfs(r); cout<<dp[r][m]; }
#Verdict Execution timeMemoryGrader output
Fetching results...