Submission #853873

#TimeUsernameProblemLanguageResultExecution timeMemory
853873thanh913Chase (CEOI17_chase)C++14
100 / 100
188 ms157496 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second using ll = long long; const int N = 1e5+5; //-------------------------------------- int n, k, a[100001]; vector<int> adj[100001]; ll down[100001][101], up[100001][101], ans = 0; void dfs(int u, int par) { ll sum = 0; for (int v : adj[u]) sum += a[v]; up[u][1] = sum; for (int v : adj[u]) if (v != par) { dfs(v, u); for (int i = 1; i <= k; i++) ans = max(ans, up[u][i] + down[v][k - i]); for (int i = 1; i <= k; i++) { down[u][i] = max({down[u][i], down[v][i], down[v][i-1] + sum - a[par]}); up[u][i] = max({up[u][i], up[v][i], up[v][i-1] + sum - a[v]}); } } memset(up[u], 0, sizeof(up[u])); up[u][1] = sum; reverse(adj[u].begin(), adj[u].end()); for (int v : adj[u]) if (v != par) { for (int i = 1; i <= k; i++) ans = max(ans, up[u][i] + down[v][k-i]); for (int i = 1; i <= k; i++) up[u][i] = max({up[u][i], up[v][i], up[v][i-1] + sum - a[v]}); } } int main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); cin >> n >> k; for (int i = 1; i <= n; i++) cin >> a[i]; for (int i = 1; i < n; i++) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } dfs(1, 0); cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...