Submission #673373

#TimeUsernameProblemLanguageResultExecution timeMemory
673373viwlesxqBiochips (IZhO12_biochips)C++17
100 / 100
287 ms401764 KiB
#include <bits/stdc++.h> using namespace std; using ll = int64_t; using str = string; #define pb push_back #define pf push_front #define ppb pop_back #define ppf pop_front #define F first #define S second #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define sz(x) (int)x.size() const int N = 2e5 + 5, M = 5e2 + 5, inf = 1e9 + 7; vector <int> g[N]; int dp[N][M], x[N], timer, tin[N], arr[N], n, m, p; void dfs(int v) { int in = timer; for (int to : g[v]) dfs(to); tin[timer] = in; arr[timer] = x[v]; timer++; } signed main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; int root = -1; timer = 1; for (int i = 1; i <= n; i++) { cin >> p >> x[i]; if (!p) root = i; g[p].pb(i); } dfs(root); for (int i = 0; i <= n; i++) { for (int j = 1; j <= m; j++) { dp[i][j] = -inf; } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { dp[i][j] = max(dp[i - 1][j], dp[tin[i] - 1][j - 1] + arr[i]); } } cout << dp[n][m]; }
#Verdict Execution timeMemoryGrader output
Fetching results...