牛客巅峰赛--牛牛打怪兽(搜索)

题目链接:https://ac.nowcoder.com/acm/contest/6631/A

  • 根节点为1的树,每个结点上最多有1只怪兽,牛牛最多只能打败两只,问从根结点开始,能走到叶结点的路径数
  • dfs直接暴搜,搜到叶结点的时候判断路上有多少怪兽,如果小于等于2,那么ans++

牛客巅峰赛--牛牛打怪兽(搜索)_第1张图片 

/**
 * 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整型
     */
    vectorv[N];
    int dfs(int s,int fa,int num,vector& 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& Edge, vector& f) {
        // write code here
        if(n==1)return 1;
        for(auto i:Edge){
            add(i.x,i.y);
        }
        return dfs(1,0,0,f);
    }
};

 

你可能感兴趣的:(dfs)