#include <bits/stdc++.h>
#define fi first
#define se second
#define all(x) x.begin(), x.end()
using namespace std;
using pii = pair<int, int>;
constexpr int inf = 1e9;
int DeletePlan( int N, int M, int K, int *A, int *B) {
vector<int> val(M);
for (int i = 0; i < N; ++i) ++val[A[i]];
vector<vector<int>> g(M);
for (int i = 1; i < M; ++i) g[B[i]].push_back(i);
vector<int> sum(M);
int timer = 0;
vector<vector<pii>> back(M + 1); // 1-based
function<void(int)> dfs = [&](int v) {
sum[v] = val[v];
int num = ++timer;
for (int u : g[v]) {
dfs(u);
sum[v] += sum[u];
}
back[timer].push_back({num, sum[v]});
};
dfs(0);
vector<vector<int>> dp(M + 1, vector<int>(K + 1, inf));
dp[0][0] = 0;
for (int i = 1; i <= M; ++i) {
for (int j = 0; j <= K; ++j) dp[i][j] = dp[i - 1][j];
for (auto [x, ad] : back[i]) {
for (int j = ad; j <= K; ++j) {
dp[i][j] = min(dp[i][j], dp[x - 1][j - ad] + 1);
}
}
}
int res = inf;
for (int i = 0; i <= K; ++i) {
res = min(res, dp[M][i] + K - i);
}
return res;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |