洛谷题单指南-图论之树-P5908 猫猫和企鹅
原题链接:https://www.luogu.com.cn/problem/P5908
题意解读:求以节点1为根,深度<=2的子树的节点数,再减去根节点自己,设根节点深度是0。
解题思路:
从根节点开始DFS,DFS过程记录三个参数
u:子树的根 parent:父节点 depth:u距离1的深度
每次DFS要计算以u为根的子树的节点数,可以根据递归得到:
以u为根的子树的节点数 = u自己 + u所有邻接点为根的子树的节点数
注意:要控制在搜索的节点深度不超过d。
100分代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
vector<int> g[N];
int n, d;
//以u为根节点深度<=d的子树的节点数
//u:子树的根 parent:父节点 depth:u距离1的深度
int dfs(int u, int parent, int depth)
{
int sum = 1; //u自己算1个
if(depth == d) return sum;
for(auto v : g[u])
{
if(v == parent) continue;
sum += dfs(v, u, depth + 1); //将u所有邻接点所形成子树的节点数累加
}
return sum;
}
int main()
{
cin >> n >> d;
int u, v;
for(int i = 1; i <= n; i++)
{
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
cout << dfs(1, 0, 0) - 1; //要减去节点1自身
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
2024-02-28 洛谷题单指南-二分查找与二分答案-P2249 【深基13.例1】查找