Submission #1300645

#TimeUsernameProblemLanguageResultExecution timeMemory
1300645azik21Biochips (IZhO12_biochips)C++20
100 / 100
274 ms5968 KiB
#include<iostream> // #include<bits/stdc++.h> #include<algorithm> #include<set> #include<map> #include<vector> #include<queue> #define pb push_back #define ll long long #define all(v) (v).begin() , (v).end() using namespace std; const int N = 2e5+1 , inf = 1e9; int dp[N][2] , x[N] , n , m ; int tin[N] , tout[N] , timer = 0 ; vector<int>g[N]; void dfs(int v , int p ){ tin[v] = ++timer; for(auto it:g[v]){ dfs(it , v); } tout[v] = timer; } 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 ); for(int k = 1 ; k <= m; k++){ for(int i= 1; i <= n ; i++){ dp[tout[i]][1] = max(dp[tout[i]][1] , dp[tin[i]-1][0] + x[i]); } for(int i= 1; i <= n; i++)dp[i][1] =max(dp[i][1] , dp[i-1][1]); for(int i = 0 ; i <= n ; i++){ dp[i][0] = dp[i][1]; dp[i][1] =-inf; } } cout << dp[n][0]; }
#Verdict Execution timeMemoryGrader output
Fetching results...