1 号居住区外每个居住区住着一个小企鹅有一天一只猫猫从 1 号居住区出发想要去拜访一些小企鹅。可是猫猫非常的懒它只愿意去距离它不大于 的小企鹅们。猫猫非常的懒因此希望你告诉他他可以拜访多少只小企鹅。输入格式第一行两个整数 ,意义如题所述。第二行开始共 −1 行每行两个整数 ,表示居民区 和 之间存在道路。输出格式一行一个整数表示猫猫可以拜访多少只小企鹅。输入输出样例 #1输入 #15 1 1 2 1 3 2 4 3 5输出 #12说明/提示对于 100% 的数据满足 1≤,≤105保证所有居民区从 1 开始标号。题目解析典型的树形结构遍历我主要讲一下dfs()函数的写法首先数据方面我推荐使用STL的vector数组这个数据结构来储存树vectorint g[N]; int n,d,ans;dfs()函数需要三个参数:1.p,表示现在的节点2.deep,表示现在的深度3.fa,表示该节点的父亲节点当deepd时,说明小猫不能再往下走了,直接return当deepd时,说明能拜访这个节点ans该节点p的邻接点分别遍历(节点为i深度deep1父亲节点为p)注父亲节点(fa)不可重复遍历所以一旦ifa就要continuedfs()如下void dfs(int p,int deep,int fa){ if(deepd) return; ans; for(auto v:g[p]){ if(vfa) continue; dfs(v,deep1,p); } }写出了dfs那么剩下的就好写了ACcode:#includebits/stdc.h using namespace std; const int N1e55; vectorint g[N]; int n,d,ans; void dfs(int p,int deep,int fa){ if(deepd) return ; ans; for(auto v:g[p]){ if(vfa) continue; dfs(v,deep1,p); } } int main(){ ios::sync_with_stdio(0); cin.tie(0); cinnd; for(int i1;in-1;i){ int u,v; cinuv; g[u].push_back(v); g[v].push_back(u); } dfs(1,0,1); coutans-1endl; return 0; } //AAA_jiancaipifa