Submission #363906

#TimeUsernameProblemLanguageResultExecution timeMemory
363906dolphingarlicChase (CEOI17_chase)C++14
30 / 100
154 ms76524 KiB
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;

int n, k, p[100001];
vector<int> graph[100001];
ll dp[100001][101];

void dfs1(int node = 1, int parent = 0) {
    ll c_sum = 0;
    for (int i : graph[node]) if (i != parent) c_sum += p[i];
    for (int i : graph[node]) if (i != parent) {
        dfs1(i, node);
        for (int j = 1; j <= k; j++)
            dp[node][j] = max({dp[node][j], dp[i][j], dp[i][j - 1] + c_sum});
    }
}

int main() {
    cin.tie(0)->sync_with_stdio(0);
    cin >> n >> k;
    for (int i = 1; i <= n; i++) cin >> p[i];
    for (int i = 1; i < n; i++) {
        int u, v;
        cin >> u >> v;
        graph[u].push_back(v);
        graph[v].push_back(u);
    }
    dfs1();
    cout << dp[1][k];
    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...