DFS序列

什么是DFS序

DFS序是指对一棵树进行DFS时,每个节点被访问到的顺序。DFS序分成两个部分:进入该节点的顺序和退出该节点的顺序。

如何求DFS序

对于DFS中当前节点

1:计数++

2:进入当前节点的顺序等于当前计数

3:想所有子节点继续搜索

4:退出当前节点的序列等于当前计数

模板代码

void dfs(int t,int f){//t代表当前节点的编号,f代表父节点的编号in[t]=++cnt;//in 进入该节点的顺序,cnt:计数for(int i=head[t];i;i=edge[i].next){if(edge[i].n!=f){dfs(edge[i].n,t);}}out[t]=cnt;//out:退出该节点的顺序
}

DFS的性质

某些连续的入序对应树中的节点是一条链(编号是有顺序的,且连在一起的),某节点入序和出序之间对应的节点一定在其子树中。(访问到某个节点的子树,那么该节点的入序一定是小于这个节点的子树的入序)(如果是出序那么,访问到该节点的子树,该节点的出序一定是大于或等于这个节点子树的出序)

如果一个节点的入序为2,出序为8,那么所有2~8的入序或出序是这个节点或者是这个节点的子树

DFS是有序的

例题

问题描述

给一棵含有 n 个结点的有根树,根结点为 11,编号为 i 的点有点权 ai​(i∈[1,n])。现在有两种操作,格式如下:

  • 1 x y:该操作表示将点x 的点权改为 y。
  • 2 x:该操作表示查询以结点 x 为根的子树内的所有点的点权的异或和。

现有长度为 m 的操作序列,请对于每个第二类操作给出正确的结果。

输入格式

输入的第一行包含两个正整数n,m,用一个空格分隔。

第二行包含 n 个整数a1​,a2​,…,an​,相邻整数之间使用一个空格分隔。

接下来 n−1 行,每行包含两个正整数 ui​,vi​,表示结点 ui​ 和 vi​ 之间有一条边。

接下来 m 行,每行包含一个操作。

输出格式

输出若干行,每行对应一个查询操作的答案。

样例输入

4 4
1 2 3 4
1 2
1 3
2 4
2 1
1 1 0
2 1
2 2

样例输出 

4
5
6

 

package xuanze;
import java.util.*;
import java.util.*;
import java.io.*;
public class chapter4 {public static void main(String[] args) throws IOException  {// TODO Auto-generated method stubBufferedReader reader = new BufferedReader(new InputStreamReader(System.in));BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));String[] temp = reader.readLine().split(" ");n = Integer.parseInt(temp[0]);m = Integer.parseInt(temp[1]);temp = reader.readLine().split(" ");for (int i = 1; i <= n; ++i) {a[i] = Integer.parseInt(temp[i - 1]);e[i]=new ArrayList<>();}for (int i = 0; i < n - 1; ++i) {temp = reader.readLine().split(" ");int u = Integer.parseInt(temp[0]);int v = Integer.parseInt(temp[1]);e[u].add(v);e[v].add(u);}dfs(1, 0);for (int i = 1; i <= n; ++i) {add(in[i], a[i]);}for (int i = 0; i < m; ++i) {temp = reader.readLine().split(" ");int op = Integer.parseInt(temp[0]);	int x = Integer.parseInt(temp[1]);if (op == 1) {int y = Integer.parseInt(temp[2]);int v = rangeSum(in[x] - 1, in[x]);add(in[x], y ^ v);} else {writer.write(rangeSum(in[x] - 1, out[x]) + "\n");}}reader.close();writer.flush();writer.close();}static int N = 100010;static int n, m, tot;static int[] a = new int[N], in = new int[N], out = new int[N], b = new int[N];static List<Integer>[] e = new List[N];static void add(int x, int v) {for (; x <= n; x += x & (-x)) {b[x] ^= v;}}static int sum(int x) {int ans = 0;if (x == 0) return 0;for (; x > 0; x -= x & (-x)) {ans ^= b[x];}return ans;}static int rangeSum(int l, int r) {return sum(r) ^ sum(l);}static void dfs(int u, int fa) {in[u] = ++tot;for (int v : e[u]) {if (v == fa) continue;dfs(v, u);}out[u] = tot;}
}

(注:此代码出于蓝桥云,非本人所写,宝宝么)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/301701.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2014最新AI智能系统ChatGPT网站源码+Midjourney绘画网站源码+搭建部署教程文档

一、文章前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持…

git提交代码时报错,提不了

问题 今天在换了新电脑&#xff0c;提交代码时报错 ✖ eslint --fix found some errors. Please fix them and try committing again. ✖ 21 problems (20 errors, 1 warning) husky > pre-commit hook failed (add --no-verify to bypass) 解决 通过 --no-verify 解决&…

如何用matplotlib画图像的时候使用中文标签名

Matplotlib 中文显示不是特别友好&#xff0c;要在 Matplotlib 中显示中文&#xff0c;我们可以通过两个方法&#xff1a; 下载使用支持中文的字体库。设置 Matplotlib 的字体参数。 下载使用支持中文的字体库: Matplotlib 默认情况不支持中文&#xff0c;我们可以使用以下简…

高维解码|Redis 收紧许可证!开源软件公司如何在云时代生存?

最近&#xff0c;Redis 从开放源代码的 BSD 许可证过渡到了更加限制性的 Server Side Public License (SSPLv1)。一石激起千层浪&#xff0c;Redis 的这一举动&#xff0c;不仅分化了前 Redis 维护者&#xff0c;也再次引发业界对于“开源项目可持续性以及许可证决策对其社区的…

帝国CMS模板源码整站安装说明(图文)

安装步骤 第一步&#xff1a;先把得到的文件解压缩&#xff0c;把文件通过FTP传到空间里。&#xff08;请不要把类似www.lengleng.net这个文件夹传到FTP&#xff0c;请传这个大文件夹下面的所有文件夹和文件到空间根目录&#xff0c;请不要上传到2级目录&#xff0c;除非你自己…

HarmonyOS 应用开发-边缓存边播放案例

介绍 OhosVideoCache是一个支持边播放边缓存的库&#xff0c;只需要将音视频的url传递给OhosVideoCache处理之后再设置给播放器&#xff0c; OhosVideoCache就可以一边下载音视频数据并保存在本地&#xff0c;一边读取本地缓存返回给播放器&#xff0c;使用者无需进行其他操作…

信阳附大医院-市民心中的健康守护者

信阳附大医院,一所集医疗、预防、保健、科研、教学、康复于一体的现代化综合医院,坐落于信阳市工区路600号,是市卫生部门批准成立的医疗机构,更是市民心中的健康守护者. 医院环境优雅,设施先进,服务周到,汇聚了一支技术精湛、经验丰富的医疗团队.医师们以患者为中心,用心倾听,精…

2005-2023年各省国内生产总值指数分季度数据

2005-2023年各省国内生产总值指数分季度数据 1、时间&#xff1a;2005-2023年 2、来源&#xff1a;国家统计局、各省统计局 3、指标&#xff1a;地区生产总值指数(上年同期100)_累计值(%) 4、范围&#xff1a;31省 5、时间跨度&#xff1a;季度 6、缺失情况&#xff1a;无…

复习知识点整理

零碎语法 1.导入某个文件夹的index文件&#xff0c;index可以省略&#xff08;这里导入的是router和store文件下的index.js文件&#xff09; 2.路由懒加载 this 1.在vue文件中使用router\store对象时 this&#xff1a;普通函数的this指向vue实例对象(在没有明确指向的时候…

第4章 Redis,一站式高性能存储方案,笔记问题

点赞具体要实现功能有哪些&#xff1f; 可以点赞的地方&#xff1a;对帖子点赞&#xff0c;对评论点赞点一次是点赞&#xff0c;再点一次是取消赞统计点赞的数量&#xff08;计数&#xff0c;string&#xff09;&#xff0c;帖子被点赞的数量&#xff0c;某个用户被点赞的数量…

rsync远程同步工具的使用

文章目录 rsync远程同步rsync同步方式备份过程配置rsync服务器&#xff08;下行同步&#xff09;rsync 命令的使用方法 配置上行同步&#xff08;依赖inotify可以实时备份&#xff09; rsync远程同步 rsync是一个开放源代码的文件同步工具&#xff0c;它可以同步文件和目录&am…

Chatgpt掘金之旅—有爱AI商业实战篇|内容策展业务|(八)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、AI技术创业内容策展业务有哪些机会&#xff1f; 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。随着…

【CTF】rip--堆栈的简单认识

前言 最近在学二进制&#xff0c;准备拿BUUCTF的pwn试试手&#xff0c;还在摸索的阶段&#xff0c;有什么思路出错的地方还请指出。 解题思路 下载文件到kali&#xff0c;查看文件为 64-bit的ELF&#xff08;ELF为Linux下的可执行文件&#xff0c;相当于Windows的exe&#xff0…

【Angular】什么是Angular中的APP_BASE_HREF

1 概述: 在这篇文章中&#xff0c;我们将看到Angular 10中的APP_BASE_HREF是什么以及如何使用它。 APP_BASE_HREF为当前页面的基础href返回一个预定义的DI标记。 APP_BASE_HREF是应该被保留的URL前缀。 2 语法: provide: APP_BASE_HREF, useValue: /gfgapp3 步骤: 在app.m…

Android Telephony框架

目录 一、简介二、应用层(Application)三、框架层(Framework)四、本地 RIL 层(RIL)五、驱动层(Modem)六、整体框架 一、简介 无论手机发展到如何智能的程度&#xff0c;最关键和重要的功能仍然是通讯&#xff0c;具体来说就是打电话、发短信、上网功能的使用。而整个 Android …

uniapp vue2 时钟 循环定时器

效果展示&#xff1a; 时钟 写在前面&#xff1a;vue2有this指向&#xff0c;没有箭头函数 实验操作&#xff1a;封装一个时钟组件 uniapp vue2 封装一个时钟组件 核心代码&#xff1a; this指向的错误代码&#xff0c;在下&#xff1a; start() { this.myTimer setInterval(…

分公司=-部门--组合模式

1.1 分公司不就是一部门吗&#xff1f; "我们公司最近接了一个项目&#xff0c;是为一家在全国许多城市都有分销机构的大公司做办公管理系统&#xff0c;总部有人力资源、财务、运营等部门。" "这是很常见的OA系统&#xff0c;需求分析好的话&#xff0…

【SpringCloud】Nacos 配置管理

目 录 一.统一配置管理1. 在 nacos 中添加配置文件2. 从微服务拉取配置 二.配置热更新1. 方式一2. 方式二 三.配置共享1. 添加一个环境共享配置2. 在 user-service 中读取共享配置3. 运行两个 UserApplication&#xff0c;使用不同的 profile4. 配置共享的优先级5. 多服务共享配…

Leetcode刷题-哈希表详细总结(Java)

哈希表 当我们想使⽤哈希法来解决问题的时候&#xff0c;我们⼀般会选择如下三种数据结构。 数组set &#xff08;集合&#xff09;map&#xff08;映射&#xff09; 当我们遇到了要快速判断⼀个元素是否出现集合⾥的时候&#xff0c;就要考虑哈希法。如果在做⾯试题⽬的时候…

【测试面试题】14题常见APP测试面试题(参考答案)

大家好&#xff0c;这份面试题不难&#xff0c;都是一些基础题。 先上一个面试题汇总图&#xff0c;建议大家可以先思考下如果是自己能不能回答全&#xff0c;再去对照看参考答案。 下面为参考答案&#xff1a; 一、基础篇 1、APP的测试流程&#xff1f; APP测试流程与web测…