题解|P5908 猫猫和企鹅

P5908 猫猫和企鹅

题目描述

王国里有 个居住区,它们之间有 条道路相连,并且保证从每个居住区出发都可以到达任何一个居住区,并且每条道路的长度都为

号居住区外,每个居住区住着一个小企鹅,有一天一只猫猫从 号居住区出发,想要去拜访一些小企鹅。可是猫猫非常的懒,它只愿意去距离它不大于 的小企鹅们。

猫猫非常的懒,因此希望你告诉他,他可以拜访多少只小企鹅。

输入格式

第一行两个整数 ,意义如题所述。

第二行开始,共 行,每行两个整数 ,表示居民区 之间存在道路。

输出格式

一行一个整数,表示猫猫可以拜访多少只小企鹅。

输入输出样例 #1

输入 #1

5 1
1 2
1 3
2 4
3 5

输出 #1

2

说明/提示

对于 的数据,满足 ,保证所有居民区从 开始标号。

题解

观察题目

解这道题很明显要找出离1号社区的距离不大于d的所有社区,是一个图的遍历问题。又因为n个社区只有n-1条道路,又退化成了树的遍历问题。

那我们可以用DFS算法,每往下遍历一层距离dist+1,同时sum+1。当dist≥d时,结束此次遍历。最终的sum值就是符合条件的社区数,即猫猫可以拜访的企鹅数。

代码

#include<iostream>
#include<string.h>
#include<algorithm>
#include<vector>
using namespace std;

const int max_size=1e5+5;
int n,d;
int sum=0;
vector<int> e[max_size];

int readint(){	//快速读入 
	char ch=getchar();
	int x=0;
	while(ch<'0' || ch>'9') ch=getchar();
	while(ch>='0' && ch<='9'){
		x=(x<<3)+(x<<1)+(ch^48);
		ch=getchar();
	}
	return x;
}

void dfs(int u,int fa,int di){
    if(di>=d) return;
    for(int i=0;i<e[u].size();i++){
        if(e[u][i]!=fa){
            dfs(e[u][i],u,di+1);
            sum++;
        } 
    }
}

void f(){
    n=readint();d=readint();
    int u,v;
    for(int i=1;i<n;i++){
        u=readint();v=readint();
        e[u].push_back(v);e[v].push_back(u);
    }
    dfs(1,0,0);
    printf("%d",sum);
}

int main(){
    f();
    return 0;
}
全部评论

相关推荐

01-28 16:12
中南大学 Java
几年前还没有chatgpt的时候,刷题真的是很痛苦。刷不出来只能看题解,题解有几个问题:第一个是每次看的写题解的人都不一样,很难有一个统一的思路;第二个也是最重要的是,题解只提供了作者自己的思路,但是没有办法告诉你你的思路哪里错了。其实很少有错误的思路,我只是需要被引导到正确的思路上面去。所以传统题解学习起来非常困难,每次做不出来难受,找题解更难受。但是现在chatgpt能做很多!它可以这样帮助你&nbsp;-1.&nbsp;可以直接按照你喜欢的语言生成各种解法的题解和分析复杂度。2.&nbsp;把题和你写的代码都发给它,它可以告诉你&nbsp;你的思路到底哪里有问题。有时候我发现我和题解非常接近,只是有一点点🤏想错了。只要改这一点点就是最优解。信心倍增。3.&nbsp;如果遇到不懂的题解可以一行一行询问为什么要这样写,chatgpt不会嫌你烦。有时候我觉得自己的range写错了,其实那样写也没错,只是chat老师的题解有一点优化,这个它都会讲清楚。4.&nbsp;它可以帮你找可以用同类型解法来做的题。然后它可以保持解法思路不变,用一个思路爽刷一个类型的题。如果题目之间思路又有变化,它会告诉你只有哪里变了,其他的地方还是老思路。5.&nbsp;它也可以直接帮你总结模板,易错点。经过chat老师的指导,我最大的改变是敢刷题了。之前刷题需要先找某一个人写的算法题repo,然后跟着某一个人他的思路刷他给的几个题。如果想写别的题,套用思路失败了,没有他的题解,也不知道到底哪里错了;看别人的题解,思路又乱了。这个问题在二分查找和dp类型的题里面特别常见。但是现在有chat老师,他会针对我的代码告诉我我哪里想错了,应该怎么做;还按照我写代码的习惯帮我总结了一套属于我的刷题模板。每天写题全是正反馈!
牛客981:不刷才是爽
AI时代的工作 VS 传...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务