Codeforces Round #321 (Div. 2) Kefa and Park 深搜
原题链接:
题意:
给你一棵有根树,某些节点的权值是1,其他的是0,问你从根到叶子节点的权值和不超过m的路径有多少条。
题解:
直接dfs一下就好了。
代码:
#include<iostream> #include<cstring> #include<vector> #include<algorithm> #define MAX_N 100005 using namespace std; vector<int> G[MAX_N]; int n,m; bool cat[MAX_N]; int ans=0; void dfs(int u,int p,int c) { if (c > m)return; bool update = false; for (int i = 0; i < G[u].size(); i++) { int v = G[u][i]; if (v == p)continue; update = true; dfs(v, u, cat[v] * (c + cat[v])); } if (!update)ans++; } int main(){ cin.sync_with_stdio(false); cin>>n>>m; for(int i=1;i<=n;i++) cin>>cat[i]; for(int i=0;i<n-1;i++){ int x,y; cin>>x>>y; G[x].push_back(y); G[y].push_back(x); } dfs(1,0,cat[1]); cout<<ans<<endl; return 0; }