Submission #1300060

#TimeUsernameProblemLanguageResultExecution timeMemory
1300060pragmatistBiochips (IZhO12_biochips)C++17
100 / 100
379 ms11696 KiB
#include<bits/stdc++.h> using namespace std; const int N = (int)2e5+7; const int inf = (int)1e9+7; int n, dp[N][2]; vector<int> g[N]; int l[N], r[N]; int a[N], tin[N], tout[N], timer; void dfs(int v, int pr) { tin[v] = ++timer; l[v] = tin[v]; for(auto to : g[v]) { if(to == pr) { continue; } dfs(to, v); } tout[v] = timer; r[v] = tout[v]; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int m; cin >> n >> m; int root = 0; for(int i = 1; i <= n; i++) { int pr; cin >> pr; cin >> a[i]; if(pr == 0) { root = i; } else { g[pr].push_back(i); } } dfs(root, 0); for(int k = 1; k <= m; k++) { //1 = k //0 = k-1 for(int i = 1; i <= n; i++) { dp[r[i]][1] = max(dp[r[i]][1], dp[l[i]-1][0]+a[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]; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...