Submission #89245

#TimeUsernameProblemLanguageResultExecution timeMemory
89245turbatBiochips (IZhO12_biochips)C++14
100 / 100
853 ms407840 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define mp make_pair #define F first #define S second #define N 200005 #define M 505 int dp[N][M], pr[N], n, m, s[N], cnt, in[N], out[N], l, r, now, ans; vector <int> child[N], ve; void dfs(int x){ if (!child[x].size()) cnt++; in[x] = cnt; for (auto a : child[x]) dfs(a); ve.pb(x); out[x] = cnt; } int main (){ cin >> n>> m; for (int i = 1;i <= n;i++){ cin >> pr[i]>> s[i]; child[pr[i]].pb(i); } dfs(child[0][0]); for (auto x : ve){ l = in[x]; r = out[x]; for (int i = 0;i <= m;i++) dp[r][i] = max(dp[r][i], dp[r - 1][i]); for (int i = 1;i <= min(l, m);i++) dp[r][i] = max(dp[r][i], dp[l - 1][i - 1] + s[x]); } for (int i = 1;i <= cnt;i++) ans = max(ans, dp[i][m]); cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...