题意
从根节点遍历每一条路径查找符合要求的路径的条数
思路
暴力建图,跑dfs即可。
AC代码
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization("unroll-loops")
#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
typedef long long ll;
typedef pair<int, int> p;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const int maxn = 2e5 + 10;
int a[maxn];
vector<int> g[maxn];
bool vis[maxn];
int cnt = 0;
int ans = 0;
int n, m;
void dfs(int u, int cnt) {
if (cnt > m) return;
vis[u] = 1;
bool flag = 0;
for (int i = 0; i < g[u].size(); i++) {
int v = g[u][i];
if (!vis[v]) {
flag = 1;
if (a[v]) dfs(v, cnt + 1);
else dfs(v, 0);
}
}
if (!flag) ans++;
}
int main() {
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
ans = 0;
dfs(1, a[1]);
cout << ans << endl;
return 0;
}