#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<vector<int>> graph;
vector<int> spiciness;
vector<bool> visited;
int n, k;
int cuts = 0;
int dfs(int node, int parent) {
visited[node] = true;
int total = spiciness[node];
for (int neighbor : graph[node]) {
if (neighbor == parent) continue;
int subtree_sum = dfs(neighbor, node);
if (total + subtree_sum <= k) {
total += subtree_sum;
} else {
cuts++;
}
}
return total;
}
int main() {
cin >> n >> k;
spiciness.resize(n);
graph.resize(n);
visited.assign(n, false);
for (int i = 0; i < n; i++) {
cin >> spiciness[i];
}
for (int i = 0; i < n - 1; i++) {
int u, v;
cin >> u >> v;
u--; v--;
graph[u].push_back(v);
graph[v].push_back(u);
}
dfs(0, -1);
cout << cuts << endl;
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |