题目链接https://www.luogu.com.cn/problem/P5908

题目大意:

\[\begin{align*}
& 给定n个点构成一颗树 每条边val=1\\
& 求从根节点Root=1开始 \quad 其它所有点v到Root的距离\mathrm{dis(v,Root)} <=\mathrm{d}的点的数量\\
\end{align*}
\]

思路:

1.bfs 队列跑一遍 记录每个点的父亲 遇到父亲就跳过
2.dfs 同上 不过dfs使用递归,用另一个参数记录父亲即可 无需开数组father[N]
#include <cstdio>
#include <queue>
#include <deque>
#include <stack>
#include <map>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#define ep emplace_back #define lld long long
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0);
#define vec vector
const int N = 2e5+9;
const int INF = 0x7FFFFFFF; //2147483647 const int inf1 = 0x3f3f3f3f; //1061109567
const int inf2 = 0x7f7f7f7f; //2139062143 memset赋值用 using namespace std; vec<int>adj[N];
struct node{
/* data */
int to,val,next;
};
node e[N];
int idx=0,head[N];
void add(int u,int v,int val){
e[idx] = {v,val,head[u]};
head[u] = idx++;
}
int n,d;//n 个点
int ans=0;
int dist[N];//所有节点到根节点1的距离
void bd(){
cin>>n>>d;
for(int i=1;i<=n;++i) head[i] = -1;
for(int i=1;i<=n-1;++i){
int u,v;
cin>>u>>v;
add(u,v,0);//双向
add(v,u,0);
}
}
void dfs(int u,int father){
if( dist[u] <= d) ans++;
for(int i=head[u] ; i!=-1 ; i = e[i].next){
int v = e[i].to;
if( v == father) continue;
dist[v] = dist[u]+1;
dfs(v,u);
}
} bool vis[N];
int fa[N];
void bfs(){
queue<int>q;
q.push(1);
while(!q.empty()){
int u = q.front();
q.pop();
if(dist[u] <= d)
ans++;
for(int i = head[u] ; i!=-1 ; i=e[i].next){
int v = e[i].to;
if(v == fa[u]) continue;
fa[v] = u;
dist[v] = dist[u] + 1;
q.push(v);
}
}
}
int main(){
ios;
bd();
//dfs(1,0);
bfs();
cout<<ans-1;
//第一次会判定 dist[1] <=d ? 答案为真 ans+= 因此ans要-1
return 0;
}

[简单] 树上的dfs & bfs_洛谷P5908 猫猫和企鹅的更多相关文章

  1. Tarjan 点双+割点+DFS【洛谷P3225】 [HNOI2012]矿场搭建

    P3225 [HNOI2012]矿场搭建 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤 ...

  2. 洛谷 p1219 八皇后

    刚参加完蓝桥杯 弱鸡错了好几道..回头一看确实不难 写起来还是挺慢的 于是开始了刷题的道路 蓝桥杯又名搜索杯 暴力杯...于是先从dfs刷起 八皇后是很经典的dfs问题 洛谷的这道题是这样的 上面的布 ...

  3. 洛谷P3379lca,HDU2586,洛谷P1967货车运输,倍增lca,树上倍增

    倍增lca板子洛谷P3379 #include<cstdio> struct E { int to,next; }e[]; ],anc[][],log2n,deep[],n,m,s,ne; ...

  4. 洛谷P2444 [POI2000]病毒(AC自动机,DFS求环)

    洛谷题目传送门 AC自动机入门--yyb巨佬的博客 AC自动机入手经典好题(虽然年代久远) 有了fail指针,trie树就不是原来的树型结构了,我们可以把它叫做trie图,由父节点向子节点连的边和fa ...

  5. [洛谷U40581]树上统计treecnt

    [洛谷U40581]树上统计treecnt 题目大意: 给定一棵\(n(n\le10^5)\)个点的树. 定义\(Tree[l,r]\)表示为了使得\(l\sim r\)号点两两连通,最少需要选择的边 ...

  6. 洛谷P3348 [ZJOI2016]大森林(LCT,虚点,树上差分)

    洛谷题目传送门 思路分析 最简单粗暴的想法,肯定是大力LCT,每个树都来一遍link之类的操作啦(T飞就不说了) 考虑如何优化算法.如果没有1操作,肯定每个树都长一样.有了1操作,就来仔细分析一下对不 ...

  7. 洛谷P2633 Count on a tree(主席树,倍增LCA,树上差分)

    洛谷题目传送门 题目大意 就是给你一棵树,每个点都有点权,每次任意询问两点间路径上点权第k小的值(强制在线). 思路分析 第k小......又是主席树了.但这次变成树了,无法直接维护前缀和. 又是树上 ...

  8. 洛谷 P2015 二叉苹果树 (树上背包)

    洛谷 P2015 二叉苹果树 (树上背包) 一道树形DP,本来因为是二叉,其实不需要用树上背包来干(其实即使是多叉也可以多叉转二叉),但是最近都刷树上背包的题,所以用了树上背包. 首先,定义状态\(d ...

  9. 【题解】洛谷P1273 有线电视网(树上分组背包)

    次元传送门:洛谷P1273 思路 一开始想的是普通树形DP 但是好像实现不大好 观摩了一下题解 是树上分组背包 设f[i][j]为以i为根的子树中取j个客户得到的总价值 我们可以以i为根有j组 在每一 ...

  10. 【题解】洛谷P1351 [NOIP2014TG] 联合权值(树形结构+DFS)

    题目来源:洛谷P1351 思路 由题意可得图为一棵树 在一棵树上距离为2的两个点有两种情况 当前点与其爷爷 当前点的两个儿子 当情况为当前点与其爷爷时比较好操作 只需要在传递时不仅传递父亲 还传递爷爷 ...

随机推荐

  1. spring eureka服务注册配置,排查服务注册上来了,但是请求没有过来。检查是否服务注册配置错误

    spring eureka服务注册配置,排查服务注册上来了,但是请求没有过来.检查是否服务注册配置错误 解决方法: 去掉该配置eureka.instance.hostname = client微服务的 ...

  2. 给你的博客加上个Live2D看板娘吧

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 给你的博客加上个Live2D看板娘吧 日期:2017-12 ...

  3. Linux下Oracle11G数据备份恢复(RMAN)

    数据库安装参考步骤1--14 https://www.cnblogs.com/baixisuozai/p/17852235.html #rman数据库备份脚本 #!/bin/bash PATH=$PA ...

  4. 内网服务器通过单台外网服务器实现外网访问,iptables NAT

    环境: ​ servera: 外网服务器 ​ serverb: 内网服务器 servera内网网关(GATEWAY)要设置为外网IP,其IP地址作为其它内网服务器的网关 servera 内网网卡配置 ...

  5. .NET 文件上传服务设计

    .NET文件上传服务设计 前言 在b站学习了一个后端小项目,然后发现这个文件上传设计还挺不错,来实现讲解一下. 项目结构如下: 基于策略+工厂模式实现文件上传服务 枚举 在Model层创建即可 pub ...

  6. 下载 Linux 内核的脚本

    介绍 在 类UNIX 环境下运行比较好(基于wget) 包括了 2.6 ~ 4.x 内核的地址. 5.x 因为 还在更新因此不做记录. 脚本下载地址: https://files.cnblogs.co ...

  7. 单芯片国产ARM+FPGA,复旦微FMQL20SM工业核心板正式发布!

  8. Java在创建同名目录/同名文件时名称拼接(数字)

    /** * 创建同名文件名称拼接(数字) * * @param path 需要创建的目录 * @return */ public static String recursionMkdirsFile(S ...

  9. JavaScript -- 数据类型 --手稿

  10. 洛谷P5020

    水一道绿题... #include<iostream> #include<utility> #include<algorithm> using namespace ...