首页 > 代码库 > 计蒜客 课程学分总数
计蒜客 课程学分总数
题目链接 课程学分总数
很基础的树型DP。注意输入数据可能是森林而不是完整的一棵树。那么给所有没有祖先的点加一个公共的根就好了。
#include <bits/stdc++.h>using namespace std;#define rep(i, a, b) for (int i(a); i <= (b); ++i)#define dec(i, a, b) for (int i(a); i >= (b); --i)typedef long long LL;const int N = 305;int f[N][N], sz[N], c[N];vector <int> v[N];int n, m;void dfs(int x){ sz[x] = 1; f[x][1] = c[x]; for (auto u : v[x]){ dfs(u); dec(i, sz[x], 1) rep(j, 1, sz[u]) f[x][i + j] = max(f[x][i + j], f[x][i] + f[u][j]); sz[x] += sz[u]; }}int main(){ scanf("%d%d", &n, &m); ++n, ++m; rep(i, 2, n){ int x, y; scanf("%d%d", &x, c + i); ++x; v[x].push_back(i); } dfs(1); printf("%d\n", f[1][m]); return 0;}
计蒜客 课程学分总数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。