| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1293838 | zeyd123 | Paprike (COI18_paprike) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
/*
---===ASCII help===---
'0' -> 48 '9' -> 57
'A' -> 65 'Z' -> 90
'a' -> 97 'z' -> 122
*/
const long long mod = 1e9 + 7;
static const int MAXN = 300000 + 5;
int n;
long long k;
long long h[MAXN];
vector<vector<int>> g;
long long sub[MAXN];
long long cuts = 0;
void dfs(int u, int parent) {
long long sum = h[u];
for (int v : g[u]) {
if (v == parent) continue;
dfs(v, u);
if (sum + sub[v] <= k) sum += sub[v];
else cuts++;
}
sub[u] = sum;
}
void solve() {
cin >> n >> k;
g.assign(n + 1);
for (int i = 1; i <= n; i++) cin >> h[i];
for (int i = 1; i < n; i++) {
int a, b;
cin >> a >> b;
g[a].push_back(b);
g[b].push_back(a);
}
dfs(1, -1);
cout << cuts;
}
int main() {
int t = 1;
//cin >> t;
while (t--) {
solve();
}
}
