您的位置:首页 > 科技 > IT业 > Day 34:2368. 受限条件下可到达节点的数目

Day 34:2368. 受限条件下可到达节点的数目

2024/12/23 20:12:25 来源:https://blog.csdn.net/weixin_46091073/article/details/139999899  浏览:    关键词:Day 34:2368. 受限条件下可到达节点的数目

Leetcode 2368. 受限条件下可到达节点的数目

现有一棵由 n 个节点组成的无向树,节点编号从 0 到 n - 1 ,共有 n - 1 条边。
给你一个二维整数数组 edges ,长度为 n - 1 ,其中 edges[i] = [ai, bi] 表示树中节点 ai 和 bi 之间存在一条边。另给你一个整数数组 restricted 表示 受限 节点。
在不访问受限节点的前提下,返回你可以从节点_ 0 到达的 最多 节点数目。_
注意,节点 0 会标记为受限节点。

image.png

用 list 数组保存每个节点可到达的节点,用一个数组保存节点是否可访问,其中1表示可访问,-1表示受限制。
0开始深度优先搜索,把节点的访问性设为 1,然后深度优先搜索遍历可到达的节点,如果节点可访问性已经是 1-1,就不进行处理。

完整代码

class Solution {int[] visit;List<Integer>[] list;public int reachableNodes(int n, int[][] edges, int[] restricted) {list = new List[n];visit = new int[n];for (int i = 0; i < n; i++) {list[i] = new ArrayList<>();}for (int[] edge : edges) {list[edge[0]].add(edge[1]);list[edge[1]].add(edge[0]);}for (int num : restricted) {visit[num] = -1;}dfs(0);int res = 0;for (int i = 0; i < n; i++) {if (visit[i] == 1) res++;}return res;}public void dfs(int index) {visit[index] = 1;for (Integer num : list[index]) {if (visit[num] == 0) dfs(num);}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com