如题。代码如下:
#include <iostream>
#include <cstdio>
using namespace std;
int n;
const int N = 7010;
int g[N][N];
int a[N];
int dp[N][5];
int in[N];
void dfs(int now) {
dp[now][1] = a[now];
for (int i = 1; i <= n; i++) {
if(g[now][i]) {
dfs(i);
dp[now][0] += max(dp[i][0], dp[i][1]);
dp[now][1] += dp[i][0];
}
}
}
int main() {
ios::sync_with_stdio(false);
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i < n; i++) {
int l, k; cin >> l >> k;
g[k][l] = 1;
in[l]++;
}
for (int i = 1; i <= n; i++)
if(in[i] == 0) {
dfs(i);
cout << max(dp[i][0], dp[i][1]);
return 0;
}
return 0;
}
虽然有好多这样的贴子,但是我既没用 vector,也没开小数组啊?