来源于yxc视频讲解
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 110;
int n, m;
int h[N], e[N], ne[N], idx;
int v[N], w[N];
int f[N][N];
void add(int x, int y) {
e[idx] = y, ne[idx] = h[x], h[x] = idx++;
}
void dfs(int x) {
for (int i = h[x]; i != -1; i = ne[i]) {
int y = e[i];
dfs(y);
for (int j = m - v[x]; j >= 0; j--) {
for (int k = 0; k <= j; k++) {
f[x][j] = max(f[x][j], f[x][j - k] + f[y][k]);
}
}
}
for (int i = m; i >= v[x]; i--) {
f[x][i] = f[x][i - v[x]] + w[x];
}
for (int i = 0; i < v[x]; i++) {
f[x][i] = 0;
}
}
int main() {
memset(h, -1, sizeof h);
cin >> n >> m;
int root;
for (int i = 1; i <= n; i++) {
int p;
cin >> v[i] >> w[i] >> p;
if (p == -1) {
root = i;
} else {
add(p, i);
}
}
dfs(root);
cout << f[root][m] << endl;
return 0;
}
可以讲下h[N],e[N],ne[N]分别代表什么吗
h是邻接表的头 e是edge,ne是next edge
你可以直接百度 用数组模拟邻接表 ,这个是老师告诉我的,真的非常实用