Submission #857230

#TimeUsernameProblemLanguageResultExecution timeMemory
857230aykhnBiochips (IZhO12_biochips)C++14
50 / 100
2077 ms403564 KiB
#include <bits/stdc++.h> // author : aykhn using namespace std; typedef long long ll; #define pb push_back #define ins insert #define mpr make_pair #define all(v) v.begin(), v.end() #define bpc __builtin_popcount #define pii pair<int, int> #define pll pair<ll, ll> #define fi first #define se second #define infll 0x3F3F3F3F3F3F3F3F #define inf 0x3F3F3F3F const int MXN = 2e5 + 5; const int MXM = 5e2 + 5; int n, m, r; vector<int> adj[MXN]; int p[MXN], c[MXN]; int dp[MXN][MXM]; void dfs(int a) { for (int v : adj[a]) dfs(v); int n1 = (int)adj[a].size(); vector<vector<int>> dp1(n1 + 5, vector<int> (MXM, 0)); for (int i = 1; i <= n1; i++) { int v = adj[a][i - 1]; for (int j = 0; j <= m; j++) { for (int k = 0; k <= j; k++) { dp1[i][j] = max(dp1[i][j], dp1[i - 1][j - k] + dp[v][k]); } } } dp[a][1] = max(c[a], dp1[n1][1]); for (int i = 2; i <= m; i++) dp[a][i] = dp1[n1][i]; } signed main() { cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> p[i] >> c[i]; if (!p[i]) { r = i; continue; } adj[p[i]].pb(i); } dfs(r); cout << dp[r][m] << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...