【算法基础:搜索与图论】3.2 树与图的dfs和bfs

文章目录

  • 例题
    • 846. 树的重心(深度优先遍历 / 树形DP)⭐⭐⭐⭐⭐🚹🚹🚹🚹🚹(重要!好题!)
    • 847. 图中点的层次
  • 相关链接

要学会建树、建图的通用方法。

dfs 和 bfs 的代码框架。

例题

846. 树的重心(深度优先遍历 / 树形DP)⭐⭐⭐⭐⭐🚹🚹🚹🚹🚹(重要!好题!)

https://www.acwing.com/problem/content/848/
在这里插入图片描述

在 dfs 的过程中,统计各个节点作为断点时的连通块最大值。

import java.util.*;public class Main {static List<Integer>[] g;static int ans = Integer.MAX_VALUE, n = 0;public static void main(String[] args){Scanner scanner = new Scanner(System.in);n = scanner.nextInt();g = new ArrayList[n + 1];Arrays.setAll(g, e -> new ArrayList<Integer>());for (int i = 0; i < n - 1; ++i) {int a = scanner.nextInt(), b = scanner.nextInt();g[a].add(b);g[b].add(a);}dfs(1, 0);      // 为什么要用dfs?因为dfs可以求出子树的大小System.out.println(ans);}static int dfs(int x, int fa) {// res记录删除该节点之后各个连通块中点数的最大值;sum记录该节点为根节点时所在连通块点的数量int res = 0, sum = 1;for (int y: g[x]) {if (y != fa) {int s = dfs(y, x);      // 枚举各个x的子节点y作为根节点时的连通块大小res = Math.max(res, s);sum += s;}}res = Math.max(res, n - sum);	// n - sum 是 x 的父节点以上的那个连通块的大小ans = Math.min(ans, res);return sum;}
}

847. 图中点的层次

https://www.acwing.com/problem/content/849/

在这里插入图片描述

看到最短距离就可以想到使用宽搜。

注意! :题目中说明了 a 和 b 表示存在一条从 a 走到 b 的边,即这是一个有向图。在建图的过程中,对于每一行只需要添加一条路径就可以了。

import java.util.*;public class Main {static List<Integer>[] g;static int n, m;public static void main(String[] args){Scanner scanner = new Scanner(System.in);n = scanner.nextInt();m = scanner.nextInt();g = new ArrayList[n + 1];Arrays.setAll(g, e -> new ArrayList<Integer>());for (int i = 0; i < m; ++i) {int a = scanner.nextInt(), b = scanner.nextInt();g[a].add(b);		// 只需要添加从 a 走到 b 的路径}System.out.println(bfs());}static int bfs() {Queue<Integer> q = new LinkedList<>();boolean[] st = new boolean[n + 1];q.offer(1);st[1] = true;int ans = 0;while (!q.isEmpty()) {int sz = q.size();for (int i = 0; i < sz; ++i) {int x = q.poll();if (x == n) return ans;for (int y: g[x]) {if (!st[y]) {st[y] = true;q.offer(y);}}}++ans;}return -1;}
}

相关链接

更多关于树形 DP 可见:
【算法】树形DP ①(树的直径)
【算法】树形DP ② 打家劫舍Ⅲ(树上最大独立集)
【算法】换根DP

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

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

相关文章

s390x 架构docker安装mysql

由于 MySQL 官方未提供 s390x 架构镜像&#xff0c;所以在应用商店启用 MySQL 前&#xff0c;需要手动修改 MySQL 镜像版本 MySQL 5.7 下载 s390x 架构最新版本镜像 docker pull ibmcom/mysql-s390x:5.7.34将镜像重命名为 1Panel 应用商店中使用的 MySQL 版本 docker tag i…

逻辑回归概述

逻辑回归介绍 1. 逻辑回归的应用场景 逻辑回归(Logistic Regression)是机器学习中的 一种分类模型 ,逻辑回归是一种分类算法,虽然名字中带有回归。由于算法的简单和高效,在实际中应用非常广泛 广告点击率是否为垃圾邮件是否患病信用卡账单是否会违约 逻辑回归就是解决二…

【Matlab】基于遗传算法优化 BP 神经网络的数据回归预测(Excel可直接替换数据)

【Matlab】基于遗传算法优化 BP 神经网络的数据回归预测&#xff08;Excel可直接替换数据&#xff09; 1.模型原理2.文件结构3.Excel数据4.分块代码4.1 arithXover.m4.2 delta.m4.3 ga.m4.4 gabpEval.m4.5 initializega.m4.6 maxGenTerm.m4.7 nonUnifMutation.m4.8 normGeomSel…

org.springframework.web.client.RestTemplate 的使用

目录 前言使用配置具体使用 前言 后端难免会发送请求&#xff0c;大致分为两种请求&#xff1a;微服务之间的内部请求和系统之间的外部请求&#xff0c;org.springframework.web.client.RestTemplate对这两种请求都支持。 使用 配置 import org.springframework.cloud.clie…

为harbor仓库添加https,新增DigiCert 免费版SSL证书

完成效果&#xff1a; 前言&#xff1a;在本地搭建好docker的镜像仓库harbor后&#xff0c;当我们登录docker login时&#xff0c;会提示证书问题x509: cannot validate certificate 登录本地报错X509 无法登录仓库也无法上传和拉取镜像&#xff0c;虽然有本机的解决方法&…

300M的联通宽带,电脑直接连接光猫只有100M;电脑连接路由器,然后路由器连接光猫却有300M???

1. 现象 300M的联通宽带&#xff0c;用了小半年之后发现网络比以前满&#xff0c;通过https://www.speedtest.cn网站测试发现只有100M 2. 猜测 难道是联通这帮人&#xff0c;偷偷把我网速降到了100M&#xff1f;&#xff1f;&#xff1f; 3. 排查过程 打电话让联通师傅上门排查…

Windows下YUICompress实现js、css混淆压缩

首先&#xff0c;我们针对Linux下的部分命令进行Windows系统的对应实现 ls————cmd /c dir/b rm————cmd /c del mv————cmd /c move pwd————cmd /c chdir 注&#xff1a;cmd /c是执行完命令后关闭命令行窗口、cmd /k是执行完命令后不关闭命令行窗口、cmd /c sta…

归并排序与计数排序

目录 一、归并排序 1.基本思想 2.归并排序的特性总结&#xff1a; 3.代码实现&#xff1a; 4.代码优化 &#xff1a; 二、计数排序&#xff08;非比较排序&#xff09; 1. 概念&#xff1a; 2.计数排序的特性总结&#xff1a; 3.代码实现&#xff1a; 一、归并排序 1.…

香农极限是如何影响光纤容量的

1 引言 上世纪末&#xff0c;DWDM技术开始在干线通信中使用并迅速普及。虽然当时DWDM系统的容量只有402.5G&#xff0c;但实验室中DWDM支持的波道数甚至超过了1000波&#xff0c;单波道速率也飙到了惊人的160G&#xff08;超1000波和单波160G是两个独立事件&#xff09;。人们普…

自定义类型:结构体进阶学习分享

自定义类型&#xff1a;结构体进阶学习分享 前言1 结构体的基础知识2 结构的声明3 特殊声明4 结构的自引用5 结构体变量的定义和初始化6 结构体内存对齐6.1 计算结构体大小相关笔试题&#xff08;基于VS&#xff09;笔试题一&#xff1a;笔试题二&#xff1a; 6.2 为什么存在内…

使用Kafka Streams开发流处理应用

使用Kafka Streams开发流处理应用 一、简介1.1 Kafka Streams定义1.2 Kafka Streams的优势1.3 Kafka Streams应用场景 二、环境搭建2.1 安装Kafka2.2 安装Kafka Streams2.3 构建Kafka集群 三、Kafka Streams编程API介绍3.1 Kafka Streams主要API3.2 应用程序的配置和参数3.3 To…

FFmpeg 命令行实现居中高清上下模糊播放效果

FFmpeg 命令行实现居中高清上下模糊播放效果。 1、16:9 的横屏原视频&#xff0c;以 16:9 竖屏上下模糊播放 以该效果播放视频的命令如下&#xff1a; ffplay -i horizontal_test_video_169.mp4 -vf \ "split[a][b]; \ [a]crop(ih/16*9):ih,scaleiw/10:-1,gblursigma5…

分布式 - 负载均衡Nginx:Nginx常见问题总结(一)

文章目录 01. 什么是Nginx&#xff1f;02. 为什么要用Nginx?03. 为什么Nginx性能这么高&#xff1f;04. Nginx 为什么不使用多线程&#xff1f;05. Nginx 请求处理流程是什么&#xff1f;06. Nginx怎么处理请求的&#xff1f;07. 什么是正向代理和反向代理&#xff1f;08. 反向…

Python爬虫学习笔记(七)————Selenium

目录 1.什么是selenium&#xff1f; 2.为什么使用selenium&#xff1f; 3.selenium安装 4.selenium的使用步骤 5.selenium的元素定位 6.访问元素信息 7.交互 1.什么是selenium&#xff1f; &#xff08;1&#xff09;Selenium是一个用于Web应用程序测试的工具。 &#…

深度理解 Spring AOP

一、什么是AOP(面向切面编程)&#xff1f;&#x1f349; AOP 为 Aspect Oriented Programming 的缩写&#xff0c;意思为面向切面编程&#xff0c;是通过预编译方式 和运行期 动态代理 实现程序功能的统一维护的一种技术。 AOP &#xff08;面向切面编程&#xff09;是 OOP&a…

代码随想录额外题目| 数组02 ●189旋转数组 ●724寻找数组中心索引

#189旋转数组 很快写出来但是用了个新数组&#xff0c;不好 void rotate(vector<int>& nums, int k) {vector<int> res(nums.size(),0);for(int i0;i<nums.size();i){int newiik;if(newi>nums.size()-1) newinewi%nums.size();res[newi]nums[i];}numsr…

【react】react18的学习(十二)– 底层原理(二)之 迭代器 iterator

迭代器iterator 是一种 ES6 规范&#xff0c;具有这种机制的数据结构才可以使用for of循环&#xff1a;返回每一项的值&#xff1b; 原型链具有Symbol.iterator属性的数据结构都具备&#xff1b;如数组、部分类数组、字符串等&#xff1b; 普通对象就不能用&#xff1b; for-…

vue组件(个人学习笔记三)

目录 友情提醒第一章、vue的组件1.1&#xff09;什么是SPA应用1.2&#xff09;vue的组件简介1.3&#xff09;vue工程中的main.js文件 第二章、Vue组件的使用2.1&#xff09;一般组件的自定义2.2&#xff09;注册组件&#xff1a;全局注册和局部注册2.2.1&#xff09;全局注册&a…

和chatgpt学架构04-路由开发

目录 1 什么是路由2 如何设置路由2.1 安装依赖2.2 创建路由文件2.3 创建首页2.4 编写HomePage2.5 更新路由配置2.6 让路由生效 3 测试总结 要想使用vue实现页面的灵活跳转&#xff0c;其中路由配置是必不可少的&#xff0c;我们在做开发的时候&#xff0c;先需要了解知识点&…

Vue--》打造个性化医疗服务的医院预约系统(二)

今天开始使用 vue3 + ts 搭建一个医院预约系统的前台页面,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的GithHub上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关…