【算法题】2368. 受限条件下可到达节点的数目

news2024/11/15 10:43:23

题目:

现有一棵由 n 个节点组成的无向树,节点编号从 0 到 n - 1 ,共有 n - 1 条边。

给你一个二维整数数组 edges ,长度为 n - 1 ,其中 edges[i] = [ai, bi] 表示树中节点 ai 和 bi 之间存在一条边。另给你一个整数数组 restricted 表示 受限 节点。

在不访问受限节点的前提下,返回你可以从节点 0 到达的 最多 节点数目。

注意,节点 0 不 会标记为受限节点。

示例 1:

image.png

输入:n = 7, edges = [[0,1],[1,2],[3,1],[4,0],[0,5],[5,6]], restricted = [4,5]
输出:4
解释:上图所示正是这棵树。
在不访问受限节点的前提下,只有节点 [0,1,2,3] 可以从节点 0 到达。

示例 2:
image.png

输入:n = 7, edges = [[0,1],[0,2],[0,5],[0,4],[3,2],[6,5]], restricted = [4,2,1]
输出:3
解释:上图所示正是这棵树。
在不访问受限节点的前提下,只有节点 [0,5,6] 可以从节点 0 到达。

提示:

2 <= n <= 10^5
edges.length == n - 1
edges[i].length == 2
0 <= ai, bi < n
ai != bi
edges 表示一棵有效的树
1 <= restricted.length < n
1 <= restricted[i] < n
restricted 中的所有值 互不相同

java代码:

class Solution {
    public int reachableNodes(int n, int[][] edges, int[] restricted) {
        List<Integer>[] adj = new List[n];
        for (int i = 0; i < n; ++i){
            adj[i] = new ArrayList<>();
        }
        // 邻接表建图
        for (int i = 0; i < n - 1; ++i){
            adj[edges[i][0]].add(edges[i][1]);
            adj[edges[i][1]].add(edges[i][0]);
        }
        boolean[] vis = new boolean[n];
        // 处理restricted数组
        for (int num : restricted) vis[num] = true;
        Deque<Integer> q = new LinkedList<>();
        q.addLast(0);
        vis[0] = true;
        int ans = 1;
        while (!q.isEmpty()){
            int cur = q.pollFirst();
            for (int next : adj[cur]){
                if (!vis[next]){
                    q.addLast(next);
                    vis[next] = true;
                    ++ans;
                }
            }
        }
        return ans;
    }
}

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

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

相关文章

接到“女儿”求救电话 亲妈差点被AI仿声骗了

听到电话里女儿的求救声&#xff0c;慌乱的母亲差点给“绑匪”打钱&#xff0c;但绑匪是假的&#xff0c;女儿的声音也是克隆的。借助最新的AI技术&#xff0c;骗子只要拿到他人3秒的语音&#xff0c;就能快速复制出一模一样的声音&#xff0c;甚至方言和语气也能模仿。 当人们…

vulnhub之AI-Web-1.0

vulnhub之AI-Web-1.0 一、信息收集 1.主机发现 nmap 172.25.0.0-255发现了靶机IP&#xff1a;172.25.0.13 2.端口扫描 nmap -A -sS -sV -Pn -O -p- 172.25.0.13发现80端口是开放的。 3.目录扫描 sudo dirb http://172.25.0.13/发现了robots.txt文件 在对其进行目录二次…

神奇的饼状图:如何用最简单的方式呈现复杂的数据

简介 饼状图顾名思义就是形如圆饼状的图形&#xff0c;它是一种常用的图表类型&#xff0c;通常用于展示数据的占比关系。饼状图通过将一个圆形区域划分为多个子区域&#xff0c;反应出不同子类数据之间的的对比关系以及子类数据在大类中的百分比。饼状图将一个数据集按照每个…

全景丨0基础学习VR全景制作,平台篇第13章:热点功能-总览介绍

全景丨0基础学习VR全景制作&#xff0c;平台篇第13章&#xff1a;热点功能-总览介绍 大家好&#xff0c;欢迎观看蛙色VR官方——后台使用系列课程&#xff01; 一、热点功能概览 热点&#xff0c;指在全景作品中添加各种类型图标的按钮&#xff0c;引导用户通过按钮产生更多的…

你知道C语言函数调用的2种方式吗?传值调用 传址调用

本篇博客会讲解C语言函数调用的2种方式&#xff0c;分别是&#xff1a;传值调用和传址调用。这2种函数调用方式有什么区别呢&#xff1f;为什么会有不同的效果呢&#xff1f;分别有哪些用途呢&#xff1f;下面我会一一展开。 区别 传值调用&#xff0c;即通过传递变量的值来调…

4个python内存性能检测工具:memory_profiler、timeit、line_profiler、heartrate的使用案例

这里总结了4个比较好的python性能检测工具&#xff0c;包括内存使用、运行时间、执行次数等方面。 1、memory_profiler查看内存的使用情况 memory_profiler可以用来测量python进程的内存使用情况。可以按行查看内存的使用情况。 memory_profiler 是一个监控进程内存消耗的模…

基于cv2的手势识别-计算机视觉

闲的无聊做的一个小玩意&#xff0c;可以调用你的计算机相机&#xff0c;识别框内的手势&#xff08;剪刀、石头和布&#xff09;&#xff0c;提供一个判决平台&#xff0c;感兴趣的可以继续完善。 用到的参考小文献&#xff1a; 具体实现结果如下 并且我另写了一个框架平台&…

风雨30年,电子表格惊人跨越,excel用户:表格都能生成软件了

电子表格&#xff0c;绝不是你看到的样子&#xff01; 你知道电子表格的前世今生吗&#xff1f; 它绝不只是你现在看到Excel或者WPS的模样。 不同的时代&#xff0c;有着不同的样子 DOS时代没有什么“可见可得”。什么都是靠想象力的&#xff0c;就是屏幕上文档的显示和打印…

供应商管理怎么做?供应商管理办法及流程介绍

阅读本文你将了解&#xff1a;1、供应商管理的重要性&#xff08;供应商管理的痛点&#xff09;&#xff1b;2、供应商管理具体流程&#xff1b;供应商管理系统有什么作用。 一、供应商管理的重要性&#xff08;供应商管理的痛点&#xff09; 供应商管理是组织中至关重要的一环…

锂溶液净化和提纯

锂离子电池是一种充电电池&#xff0c;依靠锂离子在正极和负极之间移动来工作&#xff0c;广泛应用在便携式设备、卫星、储备电源、电动汽车等领域&#xff0c;具有替代各种二次电源的潜力。 近年来国家大力提倡和发展的新能源产业&#xff0c;锂离子电池的需求量的不断攀升&a…

三维实景模型在线浏览平台,在线编辑、在线分享各类地理空间数据

很多行业用户在获取了大量的三维实景模型数据后&#xff0c;想要进行在线浏览或者分享给他人查看&#xff0c;以往只能通过人工手动将模型压缩&#xff0c;不但耗时费力&#xff0c;效果还难以达到预期。 其实&#xff0c;只需要通过四维轻云地理空间数据云管理平台就能轻松实…

DataX数据同步工具使用

1.DataX 简介 DataX 是阿里云 DataWorks 数据集成 的开源版本&#xff0c;主要就是用于实现数据间的离线同步。 DataX 致力于实现包括关系型数据库&#xff08;MySQL、Oracle 等&#xff09;、HDFS、Hive、ODPS、HBase、FTP 等 各种异构数据源&#xff08;即不同的数据库&…

# Linux shell终端设置代理服务器的方法

Linux shell终端设置代理服务器的方法 文章目录 Linux shell终端设置代理服务器的方法1 变量列表2 设置方法2.1 设置代理2.2 测试代理 3 软件专用代理3.1 yum专用代理3.2 git专用代理3.3 wget专用代理3.4 curl专用代理3.5 pip专用代理3.6 aria2c专用代理 4 最后 通过设置Linux变…

三个方法教你快速找到LinkedIn领英的潜在客户(置顶收藏)

第三点–最后一点是重点&#xff0c;要看到最后 相信很多外贸业务员都有这样的问题&#xff1a;“为什么你运营的账户询问的人数那么多&#xff0c;我自己运营的账户却没有人问呢&#xff1f;你是不是有什么好的运营技巧啊&#xff0c;可以给我说一下吗&#xff1f;”事实上&a…

Shell编程循环语句for while until(心有所觉,但亦做不解)

一、for 循环 1.用法和特点 读取不同的变量值&#xff0c;用来逐个执行同一组命令 for循环经常使用在已经知道要进行多少次循环的场景 for 变量 in 取值列表 -- 默认取值分割符&#xff08;空格、制表符、换行符&#xff09;do 或 {命令序列 done 或 }2.执行指…

时序预测 | Matlab实现SSA-BiLSTM、BiLSTM麻雀算法优化双向长短期记忆神经网络时间序列预测(含优化前后对比)

时序预测 | Matlab实现SSA-BiLSTM、BiLSTM麻雀算法优化双向长短期记忆神经网络时间序列预测(含优化前后对比) 目录 时序预测 | Matlab实现SSA-BiLSTM、BiLSTM麻雀算法优化双向长短期记忆神经网络时间序列预测(含优化前后对比)预测效果基本介绍程序设计参考资料 预测效果 基本介…

数学中为什么要研究各种各样的变换?

从信号处理角度来说 分析平稳信号所蕴涵的信息, 一般地Fourier 变换就能应付自如。但以不稳定动力系统为特征的物理世界, 信号往往具有如下特点: 非平稳、非线性、非确定、非可积、非连续、非光滑、非周期、非对称等等。使用Fourier 变换分析、解释非平稳信号, 就显得无能为力…

【日志系列】日志框架Log4j2源码解析

初始化 LoggerFactory private static final Logger logger LoggerFactory.getLogger(LogFilter.class);LoggerFactory#getLogger() public static Logger getLogger(Class<?> clazz) {Logger logger getLogger(clazz.getName());if (DETECT_LOGGER_NAME_MISMATCH) {…

设计模式 Map+函数式接口减少if else

参考资料 代码优雅之道——如何干掉过多的if else 目录 一. 前期准备1.1 标记邮箱种类的接口1.2 邮箱类型区分类1.3 入参Form实体类 二. 邮件发送的业务聚合类三. 定义函数式接口&#xff0c;创建邮件发送的Map四. 效果 一. 前期准备 1.1 标记邮箱种类的接口 import java.la…

一文让你真正了解正则表达式

1 正则表达式是什么 正则表达式(Regular Expression)其实就是一门工具&#xff0c;目的是为了字符串模式匹配&#xff0c;从而实现搜索和替换功能。它起源于上个20世纪50年代科学家在数学领域做的一些研究工作&#xff0c;后来才被引入到计算机领域中。从它的命名我们可以知道…