Submission #1025360

#TimeUsernameProblemLanguageResultExecution timeMemory
1025360delreyPaprike (COI18_paprike)C++14
13 / 100
69 ms17236 KiB
#include <bits/stdc++.h>
using namespace std;

long long n, k, h[100000], res, st[100000];
vector<long long> v[100000], c;

void dfs(int node, int parent) {
    //cout<<"node: "<<node<<" parent: "<<parent;
    st[node] = h[node];
    //c.clear();
    for(auto i : v[node]) {
        if(i == parent)
            continue;
        dfs(i, node);
        c.push_back(st[i]);
        st[node] += st[i];
    }
    //cout<<"st[node]: "<<st[node];
    if(st[node] > k) {
        sort(c.begin(), c.end());
        long long sum = h[node];
        for(auto i : c) {
            if(sum + i > k) {
                res++;
                //cout<<" +("<<node<<", "<<i<<") ";
                st[node] -= i;
            } else
                sum += i;
        }
        //cout<<" sum: "<<sum;
    }
    c.clear();
    //cout<<endl;
}

int main() {
    cin>>n>>k;
    for(int i = 0; i < n; i++)
        cin>>h[i];
    for(int i = 0; i < n - 1; i++) {
        int a, b;
        cin>>a>>b;
        a--; b--;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    dfs(0, -1);
    cout<<res<<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...