제출 #1293886

#제출 시각아이디문제언어결과실행 시간메모리
1293886littleprofessorPaprike (COI18_paprike)C++20
100 / 100
37 ms17164 KiB
/******************************************************************************

                              Online C++ Compiler.
               Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/

#include <bits/stdc++.h>
using namespace std;

vector<int> v[100001];
int h[100001];
long long k;
long long cuts = 0;

long long dfs(int u, int p) {
    vector<long long> sums;

    for (int x : v[u]) {
        if (x == p) continue;
        long long s = dfs(x, u);
        if (s > k) {
            cuts++;
        } else {
            sums.push_back(s);
        }
    }

    sort(sums.begin(), sums.end());
    long long sum = h[u];

    for (long long i : sums) {
        if (sum + i <= k) {
            sum += i;
        } 
        else {
            cuts++;
        }
    }
    return sum;
}

int main() {
    
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin>>n>>k;

    for(int i = 1 ; i <= n ; i++) cin>>h[i];
    for(int i = 0 ; i < n-1 ; i++) {
        int x, y;
        cin>>x>>y;
        v[x].push_back(y);
        v[y].push_back(x);
    }

    dfs(1,-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...