From 2768b3fc1d7e6232ff703b6ac3a05b52745a4f97 Mon Sep 17 00:00:00 2001 From: crupest Date: Tue, 9 Mar 2021 16:56:59 +0800 Subject: import(solutions): Add problem 1220. --- works/solutions/acwing/1220.cpp | 65 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 works/solutions/acwing/1220.cpp (limited to 'works') diff --git a/works/solutions/acwing/1220.cpp b/works/solutions/acwing/1220.cpp new file mode 100644 index 0000000..443ed43 --- /dev/null +++ b/works/solutions/acwing/1220.cpp @@ -0,0 +1,65 @@ +#include +#include + +const int N = 100010; + +struct Node { + int w; + std::vector children; +}; + +int n; +Node nodes[N]; +bool visited[N]; +long long contain_root[N]; +long long contain_or_not_contain_root[N]; + +void dfs(int i) { + visited[i] = true; + long long this_contain_root = nodes[i].w; + long long this_contain_or_not_contain_root = nodes[i].w; + + for (auto next : nodes[i].children) { + if (!visited[next]) { + dfs(next); + if (contain_root[next] > 0) { + this_contain_root += contain_root[next]; + } + if (contain_or_not_contain_root[next] > + this_contain_or_not_contain_root) { + this_contain_or_not_contain_root = contain_or_not_contain_root[next]; + } + } + } + + if (this_contain_root > this_contain_or_not_contain_root) { + this_contain_or_not_contain_root = this_contain_root; + } + + contain_root[i] = this_contain_root; + contain_or_not_contain_root[i] = this_contain_or_not_contain_root; +} + +int main() { + std::ios_base::sync_with_stdio(false); + std::cin.tie(nullptr); + + std::cin >> n; + + for (int i = 1; i <= n; i++) { + std::cin >> nodes[i].w; + } + + for (int i = 1; i < n; i++) { + int a, b; + std::cin >> a >> b; + nodes[a].children.push_back(b); + nodes[b].children.push_back(a); + } + + dfs(1); + + std::cout << contain_or_not_contain_root[1]; + + return 0; +} -- cgit v1.2.3