HDU 4707 Pet(DFS:树深度相关)

来源:互联网 发布:python 模拟访问ip 编辑:程序博客网 时间:2024/05/17 00:57

HDU 4707 Pet(DFS:树深度相关)

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

题目描述:

        给出一个具有N(0<N<=100000)个节点的树(节点编号从0到N-1),然后给出一个距离D(0<D<N),求出距离0号节点的距离大于D的节点个数。树中相邻节点的距离为1。

输入:首先是一个T(0<T<=10),表实例个数。对于每个实例,首先是一行N和D,然后是N-1行(X,Y),表示树的每条边。

输出:输出距离0号节点距离大于D的节点总数。

分析:

        从0号节点开始做一次DFS,记录距离大于D的节点数即可。本题采用的就是不走连接父节点边的策略判重。否则就需要一个vis数组来判重。

AC代码:

#include<cstdio>#include<vector>using namespace std;const int maxn=100000+100;vector<int> G[maxn];int sum,n,d;void dfs(int i,int dep,int fa){    if(dep>d) sum++;    int m=G[i].size();    for(int j=0;j<m;j++)if(fa!=G[i][j])        dfs(G[i][j],dep+1,i);}int main(){    int t;    scanf("%d",&t);    while(t--)    {        sum=0;        scanf("%d %d",&n,&d);        for(int i=0;i<n;i++)            G[i].clear();        for(int i=0;i<n-1;i++)        {            int x,y;            scanf("%d%d",&x,&y);            G[x].push_back(y);            G[y].push_back(x);        }        dfs(0,0,-1);        printf("%d\n",sum);    }    return 0;}


0 0
原创粉丝点击