Submission #32008

#TimeUsernameProblemLanguageResultExecution timeMemory
32008szawinis바이오칩 (IZhO12_biochips)C++14
100 / 100
333 ms402488 KiB
#include <bits/stdc++.h> using namespace std; const int MAX = 2e5+1; int n, m, x[MAX], ed[MAX], dp[MAX][501]; vector<int> g[MAX], ord; void dfs(int u) { ord.push_back(u); for(int v: g[u]) dfs(v); ed[u] = ord.size(); } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> m; int root = -1; for(int i = 0, p; i < n; i++) { cin >> p >> x[i]; --p; if(p >= 0) g[p].push_back(i); else root = i; } dfs(root); for(int j = 1; j <= m; j++) dp[n][j] = INT_MIN; for(int i = n-1; i >= 0; i--) { for(int j = 0; j <= m; j++) { dp[i][j] = dp[i+1][j]; if(j) dp[i][j] = max(dp[ed[ord[i]]][j-1] + x[ord[i]], dp[i][j]); } } cout << dp[0][m]; }
#Verdict Execution timeMemoryGrader output
Fetching results...