Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int n, m;
- vector<vector<int>> gr;
- vector<int> c;
- int solve(int u, int cnt, int par) {
- if (cnt > m) return 0;
- int subtr_count = (gr[u].size() == 1 and par == gr[u][0] ? 1 : 0);
- for (int to : gr[u]) if (to != par) {
- subtr_count += solve(to, (c[to] ? cnt + c[to] : 0), u);
- }
- return subtr_count;
- }
- int main() {
- cin.tie(0)->sync_with_stdio(0);
- cin >> n >> m;
- gr.assign(n, vector<int>());
- c.assign(n, -1);
- for (int i = 0; i < n; ++i) {
- cin >> c[i];
- }
- for (int i = 0; i < n-1; ++i) {
- int a, b; cin >> a >> b, --a, --b;
- gr[a].push_back(b);
- gr[b].push_back(a);
- }
- cout << solve(0, c[0], -1) << '\n';
- }
Advertisement
Add Comment
Please, Sign In to add comment