[模板] dfs序
| B.树之呼吸-贰之型-dfs序 | |||||
|
|||||
| Description | |||||
|
给一棵 n 个结点的树,结点编号从 1 到 n,并指定 m 号结点为根; 请你输出这棵树长度为 2*n 的 dfs 序; 注意:在深度优先遍历面对多条分支时,请按结点编号从小到大依次遍历。 |
|||||
| Input | |||||
|
输入第一行为一个正整数 T,表示测试数据组数; 对于每组测试数据,输入第一行为两个正整数 n、m,表示树的结点数及根结点的编号; 接下来 n - 1 行给出树的结构,每行两个正整数 x、y,表示结点 x 与结点 y 有边相连; 1 <= T <= 10,1 <= n <= 1e5,1 <= m <= n。 |
|||||
| Output | |||||
|
每组测试数据的第一行输出“Case #i:”(不含引号),表示是第 i 组测试数据; 接下来一行输出 2*n 个正整数,表示该树的 dfs 序,用空格分隔; 行末请不要输出多余空格。 |
|||||
| Sample Input | |||||
|
2 5 2 2 1 2 3 2 4 4 5 3 3 1 2 3 2 |
|||||
| Sample Output | |||||
|
Case #1: 2 1 1 3 3 4 5 5 4 2 Case #2: 3 2 1 1 2 3 |
|||||
| Author | |||||
| 陈鑫 |
题意: 给一棵 n 个结点的树,结点编号从 1 到 n,并指定 m 号结点为根;
请你输出这棵树长度为 2*n 的 dfs 序;
注意:在深度优先遍历面对多条分支时,请按结点编号从小到大依次遍历。
思路:dfs在进入时记录一次当前结点的下标,回溯时记录一次当前结点的下标
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
using namespace std;
typedef long long ll;
const int amn=2e5+;
int n,m,ans=,idx[amn],dfn[amn],cnt;
vector<int> eg[amn];
void dfs(int x){
dfn[++cnt]=x;
idx[x]=;
for(int i=;i<eg[x].size();i++){
int y=eg[x][i];
if(idx[y])continue;
dfs(y);
}
dfn[++cnt]=x;
}
int main(){
int T,x,y;scanf("%d",&T);
for(int C=;C<=T;C++){
for(int i=;i<=n;i++)eg[i].clear(); ///注意vector在输入前要清空
scanf("%d%d",&n,&m);
for(int i=;i<n;i++){
scanf("%d%d",&x,&y);
eg[y].push_back(x);
eg[x].push_back(y);
}
cnt=;
memset(idx,,sizeof idx);
dfs(m);
printf("Case #%d:\n",C);
for(int i=;i<=*n;i++)printf("%d%c",dfn[i],i<*n?' ':'\n');
}
}
/**
题意: 给一棵 n 个结点的树,结点编号从 1 到 n,并指定 m 号结点为根;
请你输出这棵树长度为 2*n 的 dfs 序;
注意:在深度优先遍历面对多条分支时,请按结点编号从小到大依次遍历。
思路:dfs在进入时记录一次当前结点的下标,回溯时记录一次当前结点的下标
**/
[模板] dfs序的更多相关文章
- [模板] dfs序, 树链剖分, 换根
树链剖分 树链剖分是一种对树的分治, 可以把树上的任意一条链分解为 \(O(\log n)\) 条在dfs序上相邻的子链, 便于数据结构(如线段树)来维护. 另外, 子树在dfs序上也是一个连续的区间 ...
- 洛谷P3379 【模板】最近公共祖先(LCA)(dfs序+倍增)
P3379 [模板]最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询 ...
- BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 2545 Solved: 1419[Submit][Sta ...
- NOI2011阿狸的打字机(fail树+DFS序)
Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的 ...
- HDU5692(线段树+dfs序)
Snacks Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Statu ...
- HDU-3974 Assign the task题解报告【dfs序+线段树】
There is a company that has N employees(numbered from 1 to N),every employee in the company has a im ...
- bzoj 2819(DFS序+树状数组+博弈+lca)
2819: Nim Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2045 Solved: 795[Submit][Status][Discuss] ...
- 洛谷P3178 [HAOI2015]树上操作(dfs序+线段树)
P3178 [HAOI2015]树上操作 题目链接:https://www.luogu.org/problemnew/show/P3178 题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边 ...
- SPOJ Query on a tree III (树剖(dfs序)+主席树 || Splay等平衡树)(询问点)
You are given a node-labeled rooted tree with n nodes. Define the query (x, k): Find the node whose ...
随机推荐
- JAVA:初识Java · Xer97
1. 什么是Java Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征. Java语言作为静 ...
- rsync 增量同步总是多两行数据
从google云机器rsync日志到本地,并通过logstash格式化后存入elasticsearch,但在实施过程中发现,每次rsync后通过查看elasticsearch,都会将上次已同步的数据再 ...
- 查看网卡信息 - ethtool
查看网卡是千兆还是万兆网卡,使用ethtool 网络接口名 ethtool eth0
- golang 统计系统测试覆盖率
golang 统计系统测试覆盖率 参考资料 https://www.elastic.co/blog/code-coverage-for-your-golang-system-tests https:/ ...
- Git私服搭建
Git私服搭建 一.Git服务器搭建方式 GIT是一个分布式版本管理系统,既然是分布那么必定会涉及远程通信,那么GIT是采用什么协议进行远程通信? Git支持的四种通信协议: Local(本地协议) ...
- 拿到webshell之后的事情
之前搞站都是搞到后台管理员,或者搞到webshell就宣布结束了,,今天终于有机会学习一下后面的操作了. 公司网站为php的站,已经拿到webshell.可以进行菜刀连接. 菜刀虚拟终端 php -m ...
- Ambari2.7.4+HDP3.1.4安装 Centos7离线安装
一. Ambari等简单介绍 1.1Ambari Ambari是一种基于Web的工具,支持Apache Hadoop集群的创建 .管理和监控. Ambari已支持大多数Hadoop组件,包括HDFS. ...
- NSURLSession的前世今生
系统网络框架架构图 前世-NSURLConnection NSURLConnection是苹果提供的原生网络访问类,已经有10多年的历史了,它从 iOS 2.0 开始,一直到iOS9被废弃.异步方法在 ...
- 8421BCD转余3码Verilog HDL的设计(1)
近期阅读Verilog HDL高级数字设计(第二版)中,遇到了串行比特流BCD码转余3码转换器的设计,比较独特的是: (1)该转换器的输入为1位串行比特流,输出也为1位串行比特流. BCD码与余三码的 ...
- 前端劝退预警:JavaScript 工具链不完全指南
经过这么多年的发展,JavaScript 早已经不是当年那个不太起眼的脚本语言.如今的 JavaScript 可以说是风光无限,在 Web 前端.移动端.服务端甚至物联网设备上都大展身手,到处都有它的 ...