제출 #1234452

#제출 시각아이디문제언어결과실행 시간메모리
1234452erering바이오칩 (IZhO12_biochips)C++20
100 / 100
516 ms403128 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define endl '\n' //#define int long long const int N=2e5+5,inf=1e9,MOD=1e9+7; vector<int> ch[N]; int w[N],leafs[N],dp[N][505],m; void dfs(int node){ // cout<<node<<' '<<leafs[node]<<endl; for(auto i:ch[node]){ dfs(i); for(int j=min(m,leafs[node]);j>=0;j--){ for(int k=0;k<=min(m,leafs[i]) && j+k<=min(m,leafs[node]);k++){ //if(node==2 && j+k==2 && dp[node][j]+dp[i][k]==300)cout<<j<<' '<<k<<' '<<dp[node][j]<<' '<<dp[i][k]<<' '<<i<<endl; dp[node][j+k]=max(dp[node][j+k],dp[node][j]+dp[i][k]); } } } dp[node][1]=max(dp[node][1],w[node]); // cout<<dp[node][1]<<' '<<dp[node][2]<<' '<<node<<endl; } void cnt(int node){ for(auto i:ch[node]){ cnt(i); leafs[node]+=leafs[i]; } if(ch[node].size()==0)leafs[node]+=1; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); for(int i=0;i<N;i++){ for(int j=1;j<505;j++)dp[i][j]=-inf; } int n; cin>>n>>m; int root; for(int i=1;i<=n;i++){ int p,x; cin>>p>>x; if(p==0)root=i; w[i]=x; ch[p].pb(i); } cnt(root); dfs(root); cout<<dp[root][m]; }
#Verdict Execution timeMemoryGrader output
Fetching results...