Submission #1293842

#TimeUsernameProblemLanguageResultExecution timeMemory
1293842saidshikhovPaprike (COI18_paprike)C++20
13 / 100
72 ms10848 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...