3313:查找树中最后标记的节点(★★)
目录
题目
有一棵有 n 个节点,编号从 0 到 n - 1 的 无向 树。给定一个长度为 n - 1 的整数数组 edges,其中 edges[i] = [ui, vi] 表示树中的 ui 和 vi 之间有一条边。
一开始,所有 节点都 未标记。之后的每一秒,你需要标记所有 至少 有一个已标记节点相邻的未标记节点。
返回一个数组 nodes,表示在时刻 t = 0 标记了节点 i,那么树中最后标记的节点是 nodes[i]。如果对于任意节点 i 有多个 nodes[i],你可以选择 任意 一个作为答案。
示例 1:
输入:edges = [[0,1],[0,2]]
输出:[2,2,1]
解释:

- 对于
i = 0,节点以如下序列标记:[0] -> [0,1,2]。1 和 2 都可以是答案。 - 对于
i = 1,节点以如下序列标记:[1] -> [0,1] -> [0,1,2]。节点 2 最后被标记。 - 对于
i = 2,节点以如下序列标记:[2] -> [0,2] -> [0,1,2]。节点 1 最后被标记。
示例 2:
输入:edges = [[0,1]]
输出:[1,0]
解释:

- 对于
i = 0,节点以如下序列被标记:[0] -> [0,1]。 - 对于
i = 1,节点以如下序列被标记:[1] -> [0,1]。
示例 3:
输入:edges = [[0,1],[0,2],[2,3],[2,4]]
输出:[3,3,1,1,1]
解释:

- 对于
i = 0,节点以如下序列被标记:[0] -> [0,1,2] -> [0,1,2,3,4]。 - 对于
i = 1,节点以如下序列被标记:[1] -> [0,1] -> [0,1,2] -> [0,1,2,3,4]。 - 对于
i = 2,节点以如下序列被标记:[2] -> [0,2,3,4] -> [0,1,2,3,4]。 - 对于
i = 3,节点以如下序列被标记:[3] -> [2,3] -> [0,2,3,4] -> [0,1,2,3,4]。 - 对于
i = 4,节点以如下序列被标记:[4] -> [2,4] -> [0,2,3,4] -> [0,1,2,3,4]。
提示:
2 <= n <= 105edges.length == n - 1edges[i].length == 20 <= edges[i][0], edges[i][1] <= n - 1- 输入保证
edges形成一棵合法的树。
相似问题:
分析
#1
- 典型的换根dp,同时保存最远的节点即可
|
|
2082 ms
#2
- 也可以先两次 bfs 找到直径的两个端点 u、v
- 树上任意节点距离最远的必然是 u、v 其中之一,比较即可
解答
|
|
522 ms