제출 #574448

#제출 시각아이디문제언어결과실행 시간메모리
574448saarang123바이오칩 (IZhO12_biochips)C++17
30 / 100
2111 ms400968 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int MXN = 200 * 1000 + 3; const int MXM = 503; int dp[MXN][MXM], a[MXN], sz[MXN]; vector<int> g[MXN]; int n, m; void dfs(int v) { sz[v] = max(1, (int) g[v].size()); for(int u : g[v]) { dfs(u); sz[v] += sz[u]; for(int i = sz[v]; i >= 0; i--) for(int j = 0; j <= i; j++) if(i - j >= 0 && dp[v][i - j] != -1 && dp[u][j] != -1) dp[v][i] = max(dp[v][i], dp[v][i - j] + dp[u][j]); } dp[v][1] = max(dp[v][1], a[v]); } signed main() { std::ios::sync_with_stdio(0); std::cin.tie(0); cin >> n >> m; int r = -1; for(int p, i = 1; i <= n; i++) { cin >> p >> a[i]; dp[i][0] = 0; for(int j = 1; j <= m; j++) dp[i][j] = -1; if(p) { g[p].push_back(i); } else r = i; } dfs(r); // for(int i = 1; i <= n; i++) { // for(int j = 1; j <= m; j++) // cout << dp[i][j] << ' '; // cout << '\n'; // } cout << dp[r][m] << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...