Submission #1300062

#TimeUsernameProblemLanguageResultExecution timeMemory
1300062pragmatistBiochips (IZhO12_biochips)C++17
60 / 100
552 ms40524 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 inf = 1e17 , N = 1e4 + 4; int n , m ; int x[N]; int dp[N][505]; vector<int>g[N]; void dfs(int v , int p){ for(auto it:g[v]){ if(it==p)continue; dfs(it , v); // if(v == 1) { // cout << "e : " << it << "\n"; //} for(int k = m ; k >= 0; k--){ for(int i= 0; i + k <= m ;i++){ dp[v][i+k] = max(dp[v][k] + dp[it][i] , dp[v][i+k]); } } } dp[v][1] = max(x[v] , dp[v][1]); } signed main(){ // freopen("d.in" , "r" , stdin); // freopen("d.out" , "w" , stdout); ios_base::sync_with_stdio(0) , cin.tie(0); cin >> n >> m ; 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); } dfs(pr ,0 ); // cout << "v = 1 " << dp[1][1] << "\n"; // cout << "v = 3 " << dp[3][1] << "\n"; //cout << "v = 7 " << dp[7][1] << "\n"; cout << dp[pr][m]; }
#Verdict Execution timeMemoryGrader output
Fetching results...