点有点多,不能用二维数组去存,然后用深搜
#include<iostream>
#include<vector>
using namespace std;
#define INPUT ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
const int maxn=1e5+7;
vector<int> vec[maxn];
int num[maxn];
int ans;
int n,m;
void dfs(int u,int cnt,int flag){
for(int i=0;i<vec[u].size();i++){
int v=vec[u][i];
if(v==flag) continue;
if(num[v]==0){
if(vec[v].size()==1) ans++;
dfs(v,0,u);
}
else if(cnt+1<=m){
if(vec[v].size()==1) ans++;
dfs(v,cnt+num[v],u);
}
}
}
int main(){
INPUT;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>num[i];
}
for(int i=0;i<n-1;i++){
int a,b;
cin>>a>>b;
vec[a].push_back(b);
vec[b].push_back(a);
}
dfs(1,num[1],-1);
cout<<ans<<endl;
}