社区讨论
求帮
P14637[NOIP2025] 树的价值参与者 3已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @min1tjiv
- 此快照首次捕获于
- 2025/12/01 19:11 3 个月前
- 此快照最后确认于
- 2025/12/03 20:15 3 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#define debug(...) fprintf(stderr, __VA_ARGS__)
#else
#define endl "\n"
#define debug(...) void(0)
#endif
using LL = long long;
constexpr int N = 8010, M = 810;
int n, m, fa[N];
int f[N][M];
basic_string<int> tr[N];
int dfs2(int u, int len, int j) {
int h[2] = {len, 0};
for (int v : tr[u]) {
int nl = max(len, j);
h[1] = max(h[1] + f[v][nl], h[0] + dfs2(v, len + 1, j));
h[0] += f[v][nl];
}
return max(h[0], h[1]);
}
void dfs(int u) {
for (int v : tr[u]) dfs(v);
for (int j = 0; j <= m; j++) {
int sum = j;
for (int v : tr[u]) sum += f[v][j];
f[u][j] = max(sum, dfs2(u, 1, j));
debug("f[%d][%d] = %d\n", u, j, f[u][j]);
}
}
int mian() {
cin >> n >> m;
for (int i = 1; i <= n; i++) tr[i].clear();
for (int i = 2; i <= n; i++) cin >> fa[i], tr[fa[i]] += i;
memset(f, ~0x3f, sizeof f);
dfs(1);
cout << f[1][0] << endl;
return 0;
}
int main() {
#ifndef LOCAL
cin.tie(nullptr)->sync_with_stdio(false);
#endif
int t;
cin >> t;
while (t--) mian();
return 0;
}
只拿44分
回复
共 3 条回复,欢迎继续交流。
正在加载回复...