1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-01-11 02:58:13 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
leetcode-problemset/leetcode-cn/problem (Chinese)/有向无环图中一个节点的所有祖先 [all-ancestors-of-a-node-in-a-directed-acyclic-graph].html

55 lines
2.6 KiB
HTML
Raw Normal View History

2022-03-27 20:37:52 +08:00
<p>给你一个正整数&nbsp;<code>n</code>&nbsp;,它表示一个 <strong>有向无环图</strong>&nbsp;中节点的数目,节点编号为&nbsp;<code>0</code>&nbsp;&nbsp;<code>n - 1</code>&nbsp;(包括两者)。</p>
<p>给你一个二维整数数组&nbsp;<code>edges</code>&nbsp;,其中&nbsp;<code>edges[i] = [from<sub>i</sub>, to<sub>i</sub>]</code>&nbsp;表示图中一条从&nbsp;<code>from<sub>i</sub></code>&nbsp;&nbsp;<code>to<sub>i</sub></code>&nbsp;的单向边。</p>
<p>请你返回一个数组&nbsp;<code>answer</code>,其中<em>&nbsp;</em><code>answer[i]</code>是第&nbsp;<code>i</code>&nbsp;个节点的所有&nbsp;<strong>祖先</strong>&nbsp;,这些祖先节点&nbsp;<strong>升序</strong>&nbsp;排序。</p>
<p>如果 <code>u</code>&nbsp;通过一系列边,能够到达 <code>v</code>&nbsp;,那么我们称节点 <code>u</code>&nbsp;是节点 <code>v</code>&nbsp;<strong>祖先</strong>&nbsp;节点。</p>
<p>&nbsp;</p>
<p><strong>示例 1</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2019/12/12/e1.png" style="width: 322px; height: 265px;"></p>
<pre><b>输入:</b>n = 8, edgeList = [[0,3],[0,4],[1,3],[2,4],[2,7],[3,5],[3,6],[3,7],[4,6]]
<b>输出:</b>[[],[],[],[0,1],[0,2],[0,1,3],[0,1,2,3,4],[0,1,2,3]]
<strong>解释:</strong>
上图为输入所对应的图。
- 节点 0 1 和 2 没有任何祖先。
- 节点 3 有 2 个祖先 0 和 1 。
- 节点 4 有 2 个祖先 0 和 2 。
- 节点 5 有 3 个祖先 0 1 和 3 。
- 节点 6 有 5 个祖先 0 1 2 3 和 4 。
- 节点 7 有 4 个祖先 0 1 2 和 3 。
</pre>
<p><strong>示例 2</strong></p>
<p><img alt="" src="https://assets.leetcode.com/uploads/2019/12/12/e2.png" style="width: 343px; height: 299px;"></p>
<pre><b>输入:</b>n = 5, edgeList = [[0,1],[0,2],[0,3],[0,4],[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]
<b>输出:</b>[[],[0],[0,1],[0,1,2],[0,1,2,3]]
<strong>解释:</strong>
上图为输入所对应的图。
- 节点 0 没有任何祖先。
- 节点 1 有 1 个祖先 0 。
- 节点 2 有 2 个祖先 0 和 1 。
- 节点 3 有 3 个祖先 0 1 和 2 。
- 节点 4 有 4 个祖先 0 1 2 和 3 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= n &lt;= 1000</code></li>
<li><code>0 &lt;= edges.length &lt;= min(2000, n * (n - 1) / 2)</code></li>
<li><code>edges[i].length == 2</code></li>
<li><code>0 &lt;= from<sub>i</sub>, to<sub>i</sub> &lt;= n - 1</code></li>
<li><code>from<sub>i</sub> != to<sub>i</sub></code></li>
<li>图中不会有重边。</li>
<li>图是 <strong>有向</strong><strong>无环</strong> 的。</li>
</ul>