题目链接:https://ac.nowcoder.com/acm/contest/6631/A
- 根节点为1的树,每个结点上最多有1只怪兽,牛牛最多只能打败两只,问从根结点开始,能走到叶结点的路径数
- dfs直接暴搜,搜到叶结点的时候判断路上有多少怪兽,如果小于等于2,那么ans++
/**
* struct Point {
* int x;
* int y;
* };
*/
const int N = 1e5+5;
class Solution {
public:
/**
* 返回牛牛能到达终点且不被淘汰的路径数
* @param n int整型
* @param Edge Point类vector
* @param f int整型vector
* @return int整型
*/
vector<int>v[N];
int dfs(int s,int fa,int num,vector<int>& a){
//s是当前结点,fa是父节点,num是当前遇到的怪物数
if(v[s].size()==1&&s!=1)return num+a[s-1]<=2;
int res=0;
for(auto i:v[s]){
if(i==fa)continue;
res+=dfs(i,s,num+a[s-1],a);
}
return res;
}
void add(int a,int b){
v[a].push_back(b);
v[b].push_back(a);
}
int solve(int n, vector<Point>& Edge, vector<int>& f) {
// write code here
if(n==1)return 1;
for(auto i:Edge){
add(i.x,i.y);
}
return dfs(1,0,0,f);
}
};