凯法经过公园
2025-02-03 19:30:34
发布于:上海
#include<bits/stdc++.h>
using namespace std;
vector<int> tr[100010];
int n,k;
int a[100010];
int ans;
void dfs(int u,int fa,int len){
if(len>k)return;//当前连续猫的数量>k 那之后点肯定走不到了
//如果当前是叶子节点
if(tr[u].size()==1 && u!=1)ans++;
for(int son:tr[u]){
if(son==fa)continue;
if(a[son]==1)dfs(son,u,len+1);
else dfs(son,u,0);
}
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n-1;i++){
int x,y;
cin>>x>>y;
tr[x].push_back(y);
tr[y].push_back(x);
}
dfs(1,-1,a[1]);
cout<<ans;
return 0;
}
这里空空如也
有帮助,赞一个