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 <= 105
edges.length == n - 1
edges[i].length == 2
0 <= edges[i][0], edges[i][1] <= n - 1
- 输入保证
edges
形成一棵合法的树。
相似问题:
分析
- 典型的换根dp,同时保存最远的节点即可
解答
|
|
2082 ms