1 条题解
-
0
#include <iostream> #include <vector> using namespace std; const int maxn = 6060; int f[maxn][2], h[maxn], p[maxn], n; vector<int> g[maxn]; void dfs(int u, int fa) { // u是当前节点,fa用于指代u的父节点 f[u][0] = 0; f[u][1] = h[u]; int sz = g[u].size(); for (int i = 0; i < sz; i ++) { int v = g[u][i]; if (v == fa) continue; dfs(v, u); f[u][0] += max(f[v][0], f[v][1]); f[u][1] += f[v][0]; } } int main() { cin >> n; for (int i = 1; i <= n; i ++) cin >> h[i]; for (int i = 1; i < n; i ++) { int a, b; cin >> a >> b; p[a] = b; g[b].push_back(a); } int rt; for (int i = 1; i <= n; i ++) { if (!p[i]) { rt = i; break; } } dfs(rt, -1); cout << max(f[rt][0], f[rt][1]) << endl; return 0; }
- 1
信息
- ID
- 62
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 5
- 已通过
- 2
- 上传者