Submission #1300602

#TimeUsernameProblemLanguageResultExecution timeMemory
1300602azik21Biochips (IZhO12_biochips)C++20
60 / 100
2121 ms589824 KiB
#include<iostream> // #include<bits/stdc++.h> #include<algorithm> #include<set> #include<map> #include<vector> #include<queue> #define pb push_back #define int long long #define all(v) (v).begin() , (v).end() using namespace std; const int N = 2e5+1 , inf = 1e9; int dp[N][501] , x[N] , n , k ; vector<int>g[N]; void dfs(int v , int p ){ for(auto it:g[v]){ dfs(it , v); for(int i= k ; i >= 0 ; i--){ for(int j = 0 ; j + i<= k ; j++){ dp[v][i+j] = max(dp[v][i] + dp[it][j] , dp[v][i+j]); } } } dp[v][1] = max(dp[v][1] , x[v]); } signed main(){ // freopen("d.in" , "r" , stdin); // freopen("d.out" , "w" , stdout); ios_base::sync_with_stdio(0) , cin.tie(0); cin >> n >> k; int pr =0 ; for(int i= 1; i <= n ; i++){ int p; cin >> p >> x[i]; if(p == 0 )pr =i ; g[p].pb(i); } for(int i=0 ; i <= n ;i++)dp[i][0] =0 ; for(int i=1 ; i <= n; i++){ for(int j = 2; j <= k ; j++)dp[i][j] = -inf; } dfs(pr , 0 ); cout << dp[pr][k]; }
#Verdict Execution timeMemoryGrader output
Fetching results...