From 99e2e923d0c77b02f3fb4ff648ea916954868606 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Fri, 28 Feb 2025 23:13:39 +0800 Subject: chore(store): move everything to store. --- store/works/solutions/acwing/1220.cpp | 65 +++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 store/works/solutions/acwing/1220.cpp (limited to 'store/works/solutions/acwing/1220.cpp') diff --git a/store/works/solutions/acwing/1220.cpp b/store/works/solutions/acwing/1220.cpp new file mode 100644 index 0000000..443ed43 --- /dev/null +++ b/store/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