Submission #1208352

#TimeUsernameProblemLanguageResultExecution timeMemory
1208352sula2Biochips (IZhO12_biochips)C++20
60 / 100
2099 ms78348 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[101], int val[101]) { for (int i = dp.size() - 1; i >= 0; i--) { for (int j = 1; j <= 100; 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][101]; void dfs(int u) { knapsack KN(100); for (int v : adj[u]) { dfs(v); int cost[101]; iota(cost, cost + 101, 0); KN.add(cost, dp[v]); } for (int j = 1; j <= 100; 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...