Submission #1208350

#TimeUsernameProblemLanguageResultExecution timeMemory
1208350sula2Biochips (IZhO12_biochips)C++20
40 / 100
2098 ms62148 KiB
#include <bits/stdc++.h> #define all(a) a.begin(), a.end() #define popcount(x) __builtin_popcountll(x) using namespace std; using namespace chrono; struct knapsack { vector<int> dp; knapsack(int capacity) : dp(capacity + 1, -1e9) { dp[0] = 0; } void add(int cost[501], int val[501]) { for (int i = dp.size() - 1; i >= 0; i--) { for (int j = 1; j <= 500; j++) if (i >= cost[j]) { dp[i] = max(dp[i], dp[i - cost[j]] + val[j]); } } } }; vector<int> adj[200000]; int a[200000], dp[200000][501]; void dfs(int u) { knapsack KN(500); for (int v : adj[u]) { dfs(v); int cost[501]; iota(cost, cost + 501, 0); KN.add(cost, dp[v]); } for (int j = 1; j <= 500; j++) dp[u][j] = KN.dp[j]; dp[u][1] = max(dp[u][1], a[u]); } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n,m; cin >> n >> m; int root; for (int i = 0; i < n; i++) { int par; cin >> par >> a[i]; if (par == 0) root = i; else adj[--par].push_back(i); } dfs(root); cout << dp[root][m]; }
#Verdict Execution timeMemoryGrader output
Fetching results...