diff --git a/P1352.cpp b/P1352.cpp new file mode 100644 index 0000000..ab31a06 --- /dev/null +++ b/P1352.cpp @@ -0,0 +1,48 @@ +#include +#define int long long +using namespace std; +int n; +int r[10000]; +int fa[10000]; +int f[10000][2]; +vector chi[10000]; +int dp(int now, bool choose) // 现在到哪个节点且父亲是否取 +{ + if (f[now][choose]) + return f[now][choose]; + if (choose) + { + int ans = 0; + for (auto k : chi[now]) + { + ans += dp(k, 0); + } + f[now][choose] = ans; + return ans; + } + int ans1 = 0, ans2 = 0; + for (auto k : chi[now]) + ans1 += dp(k, 0); + for (auto k : chi[now]) + ans2 += dp(k, 1); + f[now][choose] = max(ans1, ans2 + r[now]); + return f[now][choose]; +} +signed main() +{ + scanf("%lld", &n); + for (int i = 1; i <= n; ++i) + scanf("%lld", &r[i]); + for (int i = 1; i < n; ++i) + { + int u, v; + scanf("%lld%lld", &u, &v); + fa[u] = v; + chi[v].push_back(u); + } + int root = 1; + while (fa[root]) + root = fa[root]; + printf("%lld\n", dp(root, 0)); + return 0; +} \ No newline at end of file