社区讨论

求帮

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 条回复,欢迎继续交流。

正在加载回复...