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. 七夕祭【环形均分纸牌问题】