Submission #1259256

#TimeUsernameProblemLanguageResultExecution timeMemory
1259256SDAdzs1tgBiochips (IZhO12_biochips)C++20
60 / 100
304 ms589824 KiB
#include<bits/stdc++.h> #define int long long using namespace std; const int maxn = 2e5 + 10; vector<int> adj[maxn]; int n, m, in[maxn], out[maxn], cnt = 0; int a[maxn]; vector<int> x; void dfs(int u, int p) { in[u] = ++cnt; x.push_back(u); for(auto v : adj[u]) { if(v == p) continue; dfs(v, u); } out[u] = cnt; } int dp[maxn][510]; struct st{ int l, r, c; }; bool cmp(st a, st b) { return a.r < b.r; } st d[maxn]; signed main () { cin >> n >> m; int root = 0; for(int i = 1; i <= n; i++) { int v, c; cin >> v >> c; if(v == 0) { root = i; continue; } adj[i].push_back(v); adj[v].push_back(i); a[i] = c; } x.push_back(0); dfs(root, -1); for(int i = 1; i <= n; i++) { d[i] = {in[i], out[i], a[i]}; } for(int i = 0; i <= n + 1; i++) { for(int j = 1; j <= m; j++) dp[i][j] = -1e18; } for(int i = x.size() - 1; i >= 0; i--) { int t = x[i]; for(int j = 1; j <= m; j++) { dp[i][j] = max(dp[i][j], dp[i + 1][j]); dp[i][j] = max(dp[i][j], dp[out[t] + 1][j - 1] + a[t]); } } cout << dp[1][m]; }
#Verdict Execution timeMemoryGrader output
Fetching results...