LeetCode受限條件下可到達節點的數目

題目描述

現有一棵由?n?個節點組成的無向樹,節點編號從?0?到?n - 1?,共有?n - 1?條邊。

給你一個二維整數數組?edges?,長度為?n - 1?,其中?edges[i] = [ai, bi]?表示樹中節點?ai?和?bi?之間存在一條邊。另給你一個整數數組?restricted?表示?受限?節點。

在不訪問受限節點的前提下,返回你可以從節點?0?到達的?最多?節點數目

注意,節點?0??會標記為受限節點。

示例 1:

輸入: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:

輸入:n = 7, edges = [[0,1],[0,2],[0,5],[0,4],[3,2],[6,5]], restricted = [4,2,1]
輸出:3
解釋:上圖所示正是這棵樹。
在不訪問受限節點的前提下,只有節點 [0,5,6] 可以從節點 0 到達。

解題思路

本題并不難,解題主要是抓住題意,因為受限節點不可以訪問,所以我們可以直接將受限節點涉及到的邊直接排除在外,而后在驗證節點是否受限時,如果一個個查顯然時間復雜度過高,這時我們可以使用Set,減少查詢的時間復雜度。而后進行一次dfs就可以了,而后我們還需要知道,因為這是一棵樹,所以節點不會重復訪問,所以我們直接++即可。

代碼如下

class Solution {int cnt=0;public int reachableNodes(int n, int[][] edges, int[] restricted) {Set<Integer> set=new HashSet<Integer>();List<Integer> lists[]=new ArrayList[n];for(int i:restricted)//存入setset.add(i);for(int i=0;i<n;i++)lists[i]=new ArrayList<>();for(int i=0;i<n-1;i++){int x=edges[i][0];int y=edges[i][1];if(set.contains(x)||set.contains(y))//不進行邊加入continue;lists[x].add(y);lists[y].add(x);}boolean flag[]=new boolean[n];flag[0]=true;dfs(0,lists,flag);return cnt;}public void dfs(int p,List<Integer> lists[],boolean flag[]){cnt++;//不會重復直接++List<Integer> list=lists[p];for(int i=0;i<list.size();i++){int l=list.get(i);if(!flag[l]){flag[l]=true;dfs(l,lists,flag);flag[l]=false;}}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716400.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716400.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716400.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OJ:移除鏈表元素

203. 移除鏈表元素 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;這個題可以直接在原鏈表上進行修改&#xff0c;但是修改鏈表的指向是有點麻煩的&#xff0c;所以我們給兩個指針&#xff0c;phead和ptail,這是新鏈表的兩個指針&#xff0c;再給一個指針pcur來遍歷…

Java和JavaScript區別

1. Java和javaScript都是面向對象語言 2. 他兩除了名字相似之外沒有任何關系 3. Java是一種真正的面向對象語言&#xff0c;不管開發什么程序都要設計對象&#xff1b;而JavaScript是種腳本語言&#xff0c;主要實現前端頁面的交互&#xff0c;比如驗證表單&#xff0c;彈窗提…

Sqli-labs靶場第12關詳解[Sqli-labs-less-12]

Sqli-labs-Less-12 #手工注入 post傳參了 根據題目看&#xff0c;像一個登錄頁面&#xff0c;嘗試使用布爾型盲注測試能否登錄網站 1. Username輸入a a" 測試是否會有報錯&#xff0c;burp抓包 報錯&#xff1a;syntax to use near "a"") and passw…

消息中間件之RocketMQ源碼分析(二十七)

Broker提交或回滾事務消息 當生產者本地事務處理完成并且Broker回查事務消息后&#xff0c;不管執行Commit還是Rollback,都會根據用戶本地事務的執行結果發送一個End_transaction的RPC請求給Broker&#xff0c;Broker端處理該請求的類是EndTransactionProcessor 第一步&…

volatile 關鍵字 (一)

volatile 關鍵字 &#xff08;一&#xff09; 文章目錄 volatile 關鍵字 &#xff08;一&#xff09;如何保證變量的可見性&#xff1f;如何禁止指令重排序&#xff1f; 文章來自Java Guide 用于學習如有侵權&#xff0c;立即刪除 如何保證變量的可見性&#xff1f; 在 Java 中…

【Linux安裝軟件命令及vim、gcc使用說明】

安裝軟件命令 Linux安裝軟件的命令首先要進入管理員權限 首先在終端輸入sudo su切換到管理員界面 輸入對應的密碼&#xff0c;注意這里的密碼不會顯示出來&#xff0c;輸完密碼之后回車即可。當出現root就代表已經是管理員界面了。 如果相應退出管理員界面輸入exit即可。 注…

django-paramiko遠程服務器和文件管理(五)

一、paramiko簡介 1.paramiko是一個基于SSHv2協議的純Python庫。需要單獨安裝。 2.它提供了客戶端和服務器的功能。 3.可以實現SSH2遠程安全連接&#xff0c;支持用戶名、密碼連接&#xff0c;也支持密鑰連接 4.一般用于執行遠程命令、傳輸文件、中間SSH代理等 安裝 pip3 in…

數組、冒泡排序、函數、作用域、對象、Math

數組 1.定義數組&#xff1a; a)通過字面量的方式定義數組 let ary[1,2,3,4]b)通過定義構造函數的方式定義數組&#xff1a; let 數組名new Array(值,值,值);數組的操作方式 a)增 //在數組末尾添加值 arr.push(新增的內容) //在數組的開始添加值 arr.unshift(新增的內容)b…

Redis主從復制+Redis哨兵模式+Redis群集模式

Redis主從復制Redis哨兵模式Redis群集模式一、Redis主從復制1、主從復制的作用2、主從復制過程3、搭建Redis主從復制3.1 所有節點服務器安裝redis3.2 修改Redis配置文件(Master節點操作)3.3 修改Redis配置文件(Slave節點操作)3.4 驗證主從效果 二、Redis哨兵模式1、哨兵模式的作…

8、IBOScms代碼審計

一、sql注入 1、sql注入(Ⅰ) 限制 rreport/api/getlist {"offset":0,"type":"send","keyword":{"subject":"111) AND (updatexml(1,concat(0x7e,(select user()),0x7e),1))-- qw"}}復現 POST /?rreport/api/…

Vue開發實例(十一)用戶列表的實現與操作

用戶列表的實現與操作 一、創建用戶頁面和路由二、表格優化1、表頭自定義2、表格滾動3、加入數據索引4、利用插槽自定義顯示 三、功能1、查詢功能3、增加4、刪除5、修改 一、創建用戶頁面和路由 創建用戶頁面 在 src/components/Main 下創建文件夾user&#xff0c;創建文件Us…

Java ZooKeeper-RocketMQ 面試題

Java ZooKeeper-RocketMQ 面試題 前言1、談談你對ZooKeeper的理解 &#xff1f;2、Zookeeper的工作原理&#xff08;Zab協議&#xff09;3、談談你對分布式鎖的理解&#xff0c;以及分布式鎖的實現&#xff1f;4、 zookeeper 是如何保證事務的順序一致性的&#xff1f;5、 zook…

設計模式之策略模式詳解

目錄 什么是策略模式 應用場景 業務場景實現 抽象類 實現類 Context上下文 測試類 策略模式的優缺點 什么是策略模式 他將定義的算法家族、分別封裝起來&#xff0c;讓他們之間可以相互替換&#xff0c;從而讓算法的變化不會影響到使用算法的用戶。 策略模式使用的就是…

idea出現莫名其妙錯的時候

正常情況idea使用起來都很順手&#xff0c;但是當項目比較多的時候&#xff0c;可能出現莫名奇妙的錯誤&#xff0c;比如導入的包始終報錯java: 程序包com不存在&#xff0c;或者引入自己寫的包也不存在&#xff0c;或者始終出現紅線但是排查之后沒有問題的情況&#xff0c;這種…

進來吧,給自己10分鐘,這篇文章帶你直接學會python

Python的語言特性 Python是一門具有強類型(即變量類型是強制要求的)、動態性、隱式類型(不需要做變量聲明)、大小寫敏感(var和VAR代表了不同的變量)以及面向對象(一切皆為對象)等特點的編程語言。 獲取幫助 你可以很容易的通過Python解釋器獲取幫助。如果你想知道一個對象(o…

OJ:鏈表的中間結點

876. 鏈表的中間結點 - 力扣&#xff08;LeetCode&#xff09; 思路 思路&#xff1a;首先最容易想到的思路是什么呢&#xff0c;就是先遍歷一遍鏈表&#xff0c;用一個值count來記錄鏈表的長度&#xff0c;然后我們運用除法&#xff0c;/2&#xff0c;結果是幾&#xff0c;就…

【C++干貨基地】揭秘C++11常用特性:內聯函數 | 范圍for | auto自動識別 | nullptr指針空值

&#x1f3ac; 鴿芷咕&#xff1a;個人主頁 &#x1f525; 個人專欄: 《C干貨基地》《粉絲福利》 ??生活的理想&#xff0c;就是為了理想的生活! 引入 哈嘍各位鐵汁們好啊&#xff0c;我是博主鴿芷咕《C干貨基地》是由我的襄陽家鄉零食基地有感而發&#xff0c;不知道各位的…

平臺工程: 用Backstage構建開發者門戶 - 2

本文介紹了如何使用開源Backstage構建自己的開發者門戶&#xff0c;并基于此實踐平臺工程。本系列共兩篇文章&#xff0c;這是第二篇。原文: Platform Engineering: Building Your Developer Portal with Backstage — Part 2 在本教程第一部分中我們了解了Backstage這個用于構…

外貿網站模板建站

測繪檢測wordpress外貿主題 簡潔實用的wordpress外貿主題&#xff0c;適合做測繪檢測儀器設備的外貿公司使用。 https://www.jianzhanpress.com/?p5337 白馬非馬衣服WordPress外貿建站模板 白馬非馬服裝行業wordpress外貿建站模板&#xff0c;適用于時間服裝企業的官方網站…

Git 如何上傳本地的所有分支

Git 如何上傳本地的所有分支 比如一個本地 git 倉庫里定義了兩個遠程分支&#xff0c;一個名為 origin&#xff0c; 一個名為 web 現在本地有一些分支是 web 遠程倉庫沒有的分支&#xff0c;如何將本地所有分支都推送到 web 這個遠程倉庫上呢 git push web --all