hdu 4707 Pet(深搜)

来源:互联网 发布:机器人编程实战 编辑:程序博客网 时间:2024/05/17 00:05

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=4707

解题思路:

题目大意:

给你n个点,标号为0~n-1,还有n-1条边,数据保证n-1条边不成环,也就是说,输入的节点为n的一棵树。根节点为0,要你求深度大于d的节点的数目。

算法思想:

从根节点0开始,dfs其所有的子节点,统计深度小于等于d的节点的数目cnt,那么答案就是n-cnt。。。

AC代码:

#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <algorithm>using namespace std;vector<int> v[100005];int n,d;int vis[100005];void dfs(int x,int sum){    if(sum == d)        return ;    int l = v[x].size();    for(int i = 0; i < l; i++){        int tmp = v[x][i];        if(!vis[tmp]){            vis[tmp] = 1;            dfs(tmp,sum+1);        }    }}int main(){    int T;    scanf("%d",&T);    while(T--){        scanf("%d%d",&n,&d);        int x,y;        for(int i = 0; i <= n; i++)            v[i].clear();        memset(vis,0,sizeof(vis));        for(int i = 0; i < n-1; i++){            scanf("%d%d",&x,&y);            v[x].push_back(y);            v[y].push_back(x);        }        vis[0] = 1;        dfs(0,0);        int ans = 0;        for(int i = 0; i < n; i++)            if(!vis[i])                ans++;        printf("%d\n",ans);    }    return 0;}



0 0
原创粉丝点击