[模板] 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 ...
随机推荐
- redis笔记之一
NoSQL简介 全称是Not Only SQL,泛指菲关系型数据库,它是通过键值对存储数据并且将数据存储在内存中.而像mysql,sql server这些通过关系表存数据的就叫关系型数据库 为什么需要 ...
- markdoen语法
# 标题1 ## 标题2 ### 标题3 #### 标题4 ##### 标题5 ###### 标题6 1. 有序列表1 2. 有序列表2 <!--more--> + 无序列表 * 无序列表 ...
- insert时出现主键冲突的处理方法
使用"insert into"语句进行数据库操作时可能遇到主键冲突,用户需要根据应用场景进行忽略或者覆盖等操作.总结下,有三种解决方案来避免出错. 测试表:CREATE TABLE ...
- JAVA中对list map根据map某个key值进行排序
package test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; ...
- date成字符串
//获取当前时间 Date date=new Date(); System.out.println("当前date: "+date); //将时间转化成yyyy-MM-dd格式的字 ...
- mac中如何复制拷贝文件或文件夹的路径
copy path in Mac 首先打开 automator(自动操作) 然后 最后command+s保存,命名为copy path. 然后随便找个文件右击,选择服务,再选择 copy path , ...
- 正式学习MVC 03
1.View -> Controller的数据通信 1) 通过url查询字符串 public ActionResult Index(string user) { return Content(u ...
- JZOJ 5257. 小X的佛光 (Standard IO)
5257. 小X的佛光 (Standard IO) Time Limits: 2000 ms Memory Limits: 524288 KB Description Input Output Sam ...
- HashSet底层、及存入对象时候如何保持唯一
HashSet底层.及存入对象时候如何保持唯一 在JDK1.8之前,哈希表底层采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里. 但是当位于一个桶中的元素较多,即hash ...
- Python学习之布尔和数字
布尔有True和Flase两种值 数字0.None,以及元素为空的容器类对象都可视为False,反之为Ture.