C. Kefa and Park【树的遍历】
生活随笔
收集整理的这篇文章主要介绍了
C. Kefa and Park【树的遍历】
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],cnt[N],st[N],n,m,ans;
vector<int>ve[N];
void dfs(int u,int t,int maxv)//t连续的1 maxv总路径中最长的连续的1
{maxv=max(maxv,t+a[u]);if(a[u]==0) cnt[u]=0;else cnt[u]=t+a[u];st[u]=1;if(ve[u].size()==1&&maxv<=m&&u!=1) ans++;//是叶子且不是1,且猫的数量<=m for(int i=0;i<ve[u].size();i++){int j=ve[u][i];if(st[j]) continue;dfs(j,cnt[u],maxv);}
}
int main(void)
{cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i];for(int i=1;i<=n-1;i++){int a,b; cin>>a>>b;ve[a].push_back(b);ve[b].push_back(a);}dfs(1,0,0);cout<<ans;return 0;
}
总结
以上是生活随笔为你收集整理的C. Kefa and Park【树的遍历】的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 131. 直方图中最大的矩形【单调栈】
- 下一篇: 105. 七夕祭【环形均分纸牌问题】