Submission #1011550

#TimeUsernameProblemLanguageResultExecution timeMemory
1011550NValchanovChase (CEOI17_chase)C++17
20 / 100
4046 ms188588 KiB
#include <bits/stdc++.h> #define endl '\n' using namespace std; typedef long long ll; const int MAXN = 1e5 + 10; const int MAXK = 1e2 + 10; int n, k; vector < int > adj[MAXN]; ll c[MAXN]; ll ans; ll dp[MAXN][MAXK][2]; void read() { cin >> n >> k; for(int i = 1; i <= n; i++) { cin >> c[i]; } for(int i = 1; i <= n - 1; i++) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } } void dfs(int u, int par) { ll sum = 0; for(int v : adj[u]) sum += c[v]; vector < int > nb; dp[u][1][1] = sum; for(int v : adj[u]) { if(v == par) continue; dfs(v, u); nb.push_back(v); for(int i = 1; i <= k; i++) { ans = max(ans, dp[u][i][1] + dp[v][k - i][0]); } for(int i = 1; i <= k; i++) { dp[u][i][0] = max({dp[u][i][0], dp[v][i][0], dp[v][i - 1][0] + sum - c[par]}); dp[u][i][1] = max({dp[u][i][1], dp[v][i][1], dp[v][i - 1][1] + sum - c[v]}); } } /// after traversing children for(int i = 1; i <= n; i++) { dp[u][i][1] = 0; } dp[u][1][1] = sum; reverse(nb.begin(), nb.end()); for(int v : nb) { for(int i = 1; i <= k; i++) { ans = max(ans, dp[u][i][1] + dp[v][k - i][0]); } for(int i = 1; i <= k; i++) { dp[u][i][1] = max({dp[u][i][1], dp[v][i][1], dp[v][i - 1][1] + sum - c[v]}); } } } int main() { ios_base :: sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); read(); dfs(1, 0); cout << ans << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...