mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-01-11 02:58:13 +08:00
60 lines
3.5 KiB
HTML
60 lines
3.5 KiB
HTML
|
<p>给你一个 <code>n</code> 个点的 <strong>简单有向图</strong> (没有重复边的有向图),节点编号为 <code>0</code> 到 <code>n - 1</code> 。如果这些边是双向边,那么这个图形成一棵 <strong>树</strong> 。</p>
|
|||
|
|
|||
|
<p>给你一个整数 <code>n</code> 和一个 <strong>二维</strong> 整数数组 <code>edges</code> ,其中 <code>edges[i] = [u<sub>i</sub>, v<sub>i</sub>]</code> 表示从节点 <code>u<sub>i</sub></code> 到节点 <code>v<sub>i</sub></code> 有一条 <strong>有向边</strong> 。</p>
|
|||
|
|
|||
|
<p><strong>边反转</strong> 指的是将一条边的方向反转,也就是说一条从节点 <code>u<sub>i</sub></code> 到节点 <code>v<sub>i</sub></code> 的边会变为一条从节点 <code>v<sub>i</sub></code> 到节点 <code>u<sub>i</sub></code> 的边。</p>
|
|||
|
|
|||
|
<p>对于范围 <code>[0, n - 1]</code> 中的每一个节点 <code>i</code> ,你的任务是分别 <strong>独立</strong> 计算 <strong>最少</strong> 需要多少次 <strong>边反转</strong> ,从节点 <code>i</code> 出发经过 <strong>一系列有向边</strong> ,可以到达所有的节点。</p>
|
|||
|
|
|||
|
<p>请你返回一个长度为 <code>n</code> 的整数数组<em> </em><code>answer</code><em> </em>,其中<em> </em><code>answer[i]</code>表示从节点 <code>i</code> 出发,可以到达所有节点的 <strong>最少边反转</strong> 次数。</p>
|
|||
|
|
|||
|
<p> </p>
|
|||
|
|
|||
|
<p><strong class="example">示例 1:</strong></p>
|
|||
|
|
|||
|
<p><img height="246" src="https://assets.leetcode.com/uploads/2023/08/26/image-20230826221104-3.png" width="312" /></p>
|
|||
|
|
|||
|
<pre>
|
|||
|
<b>输入:</b>n = 4, edges = [[2,0],[2,1],[1,3]]
|
|||
|
<b>输出:</b>[1,1,0,2]
|
|||
|
<b>解释:</b>上图表示了与输入对应的简单有向图。
|
|||
|
对于节点 0 :反转 [2,0] ,从节点 0 出发可以到达所有节点。
|
|||
|
所以 answer[0] = 1 。
|
|||
|
对于节点 1 :反转 [2,1] ,从节点 1 出发可以到达所有节点。
|
|||
|
所以 answer[1] = 1 。
|
|||
|
对于节点 2 :不需要反转就可以从节点 2 出发到达所有节点。
|
|||
|
所以 answer[2] = 0 。
|
|||
|
对于节点 3 :反转 [1,3] 和 [2,1] ,从节点 3 出发可以到达所有节点。
|
|||
|
所以 answer[3] = 2 。
|
|||
|
</pre>
|
|||
|
|
|||
|
<p><strong class="example">示例 2:</strong></p>
|
|||
|
|
|||
|
<p><img height="217" src="https://assets.leetcode.com/uploads/2023/08/26/image-20230826225541-2.png" width="322" /></p>
|
|||
|
|
|||
|
<pre>
|
|||
|
<b>输入:</b>n = 3, edges = [[1,2],[2,0]]
|
|||
|
<b>输出:</b>[2,0,1]
|
|||
|
<b>解释:</b>上图表示了与输入对应的简单有向图。
|
|||
|
对于节点 0 :反转 [2,0] 和 [1,2] ,从节点 0 出发可以到达所有节点。
|
|||
|
所以 answer[0] = 2 。
|
|||
|
对于节点 1 :不需要反转就可以从节点 2 出发到达所有节点。
|
|||
|
所以 answer[1] = 0 。
|
|||
|
对于节点 2 :反转 [1,2] ,从节点 2 出发可以到达所有节点。
|
|||
|
所以 answer[2] = 1 。
|
|||
|
</pre>
|
|||
|
|
|||
|
<p> </p>
|
|||
|
|
|||
|
<p><strong>提示:</strong></p>
|
|||
|
|
|||
|
<ul>
|
|||
|
<li><code>2 <= n <= 10<sup>5</sup></code></li>
|
|||
|
<li><code>edges.length == n - 1</code></li>
|
|||
|
<li><code>edges[i].length == 2</code></li>
|
|||
|
<li><code>0 <= u<sub>i</sub> == edges[i][0] < n</code></li>
|
|||
|
<li><code>0 <= v<sub>i</sub> == edges[i][1] < n</code></li>
|
|||
|
<li><code>u<sub>i</sub> != v<sub>i</sub></code></li>
|
|||
|
<li>输入保证如果边是双向边,可以得到一棵树。</li>
|
|||
|
</ul>
|