[模板] 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 ...
随机推荐
- Android apk签名详解——AS签名、获取签名信息、系统签名、命令行签名
Apk签名,每一个Android开发者都不陌生.它就是对我们的apk加了一个校验参数,防止apk被掉包.一开始做Android开发,就接触到了apk签名:后来在微信开放平台.高德地图等平台注册时,需要 ...
- 亚马逊,谷歌,Facebook,IBM和微软:为了AI,是的,我们在一起了
美国时间9月28日,也就是几个小时前,亚马逊,谷歌,Facebook,IBM和微软宣布成立了一家非盈利组织:人工智能合作组织(Partnership on AI),目标是为人工智能的研究制定和提供范例 ...
- android使用giflib加载gif
转载请标明出处:https:////www.cnblogs.com/tangZH/p/12356915.html 背景不多说,反正ndk加载gif比java上加载gif好很多很多,主要体现在内存占用与 ...
- 一个很实用的css技巧简析
我是小雨小雨,专注于更新有趣.实用内容的小伙,如果内容对大家有一点帮助,那么就请动动手指,给个关注.点赞支持一下吧. ^ - ^ 序言 前两天接到一个需求,其中包括一个有序的列表,我们今天就来看看这个 ...
- C++走向远洋——31(六周,项目一,1.1)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:fenshu.cpp * 作者:常轩 * 微信公众号:World ...
- 达拉草201771010105《面向对象程序设计(java)》第四周学习总结
实验四类与对象的定义及使用 实验时间 2018-9-20 第一部分:理论知识 1.类与对象概念 (1)类是具有相同属性和方法的一类事物的抽象,是构造对象的模板或蓝图,由类构造对象的过程称为创建类的实例 ...
- 一起了解 .Net Foundation 项目 No.13
.Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. MVVM Light To ...
- 前端javascript知识(二)
documen.write和 innerHTML的区别 document.write只能重绘整个页面 innerHTML可以重绘页面的一部分 浏览器检测通过什么? (1) navigator.user ...
- SpringBoot1.5.10.RELEASE项目如何在tomcat容器中运行
一. SpringBoot内嵌容器的部署方式 SpringBoot内部默认提供内嵌的tomcat容器,所以可以直接打成jar包,丢到服务器上的任何一个目录,然后在当前目录下执行java -jar de ...
- 解决Sprite Atlas打包Asset bundles时重复打包的问题
0x00 前言 在Unity 2018.4.6之前的版本,有一个和SpriteAtlas打AB包有关的常见问题.即当给Sprite Atlas打AB包时,Sprite Atlas Texture可能会 ...