Submission #673344

#TimeUsernameProblemLanguageResultExecution timeMemory
673344viwlesxqBiochips (IZhO12_biochips)C++17
90 / 100
306 ms399432 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 + 1, M = 5e2 + 1, inf = 1e9 + 7; vector <int> g[N]; int dp[N][M], p[N], x[N], timer = 1, tin[N], arr[N]; 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); int n, m; cin >> n >> m; int root = -1; for (int i = 1; i <= n; i++) { cin >> p[i] >> x[i]; if (!p[i]) root = i; else g[p[i]].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...