@@ -81963,17 +81963,17 @@ <h2 id="_2">解法</h2>
81963
81963
<!-- solution:start -->
81964
81964
81965
81965
<h3 id="dijkstra">方法一:堆优化的 Dijkstra</h3>
81966
- <p>我们先创建一个邻接表 $g $,用于存储图的边。然后创建一个数组 $dist$,用于存储从节点 $0$ 到其他节点的最短距离。初始化 $dist[0] = 0$,其余节点的距离初始化为无穷大。</p>
81966
+ <p>我们先创建一个邻接表 $\textit{g} $,用于存储图的边。然后创建一个数组 $\textit{ dist} $,用于存储从节点 $0$ 到其他节点的最短距离。初始化 $\textit{ dist} [0] = 0$,其余节点的距离初始化为无穷大。</p>
81967
81967
<p>然后,我们使用 Dijkstra 算法计算从节点 $0$ 到其他节点的最短距离。具体步骤如下:</p>
81968
81968
<ol>
81969
- <li>创建一个优先队列 $q $,用于存储节点的距离和节点编号,初始时将节点 $0$ 加入队列,距离为 $0$。</li>
81970
- <li>从队列中取出一个节点 $u$,如果 $u$ 的距离 $du$ 大于 $dist[u]$,说明 $u$ 已经被更新过了,直接跳过。</li>
81971
- <li>遍历节点 $u$ 的所有邻居节点 $v$,如果 $dist[v] > dist[u] + w$ 且 $dist[u] + w < disappear[v]$,则更新 $dist[v] = dist[u] + w$,并将节点 $v$ 加入队列。</li>
81969
+ <li>创建一个优先队列 $\textit{pq} $,用于存储节点的距离和节点编号,初始时将节点 $0$ 加入队列,距离为 $0$。</li>
81970
+ <li>从队列中取出一个节点 $u$,如果 $u$ 的距离 $du$ 大于 $\textit{ dist} [u]$,说明 $u$ 已经被更新过了,直接跳过。</li>
81971
+ <li>遍历节点 $u$ 的所有邻居节点 $v$,如果 $\textit{ dist} [v] > \textit{ dist} [u] + w$ 且 $\textit{ dist} [u] + w < \textit{ disappear} [v]$,则更新 $\textit{ dist} [v] = \textit{ dist} [u] + w$,并将节点 $v$ 加入队列。</li>
81972
81972
<li>重复步骤 2 和步骤 3,直到队列为空。</li>
81973
81973
</ol>
81974
- <p>最后,我们遍历 $dist$ 数组,如果 $dist[i] < disappear[i]$,则 $answer[i] = dist[i]$,否则 $answer[i] = -1$。</p>
81974
+ <p>最后,我们遍历 $\textit{ dist} $ 数组,如果 $\textit{ dist} [i] < \textit{ disappear} [i]$,则 $\textit{ answer} [i] = \textit{ dist} [i]$,否则 $\textit{ answer} [i] = -1$。</p>
81975
81975
<p>时间复杂度 $O(m \times \log m)$,空间复杂度 $O(m)$。其中 $m$ 是边的数量。</p>
81976
- <div class="tabbed-set tabbed-alternate" data-tabs="1:4 "><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Python3</label><label for="__tabbed_1_2">Java</label><label for="__tabbed_1_3">C++</label><label for="__tabbed_1_4">Go</label></div>
81976
+ <div class="tabbed-set tabbed-alternate" data-tabs="1:5 "><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" />< div class="tabbed-labels"><label for="__tabbed_1_1">Python3</label><label for="__tabbed_1_2">Java</label><label for="__tabbed_1_3">C++</label><label for="__tabbed_1_4">Go</label><label for="__tabbed_1_5">TypeScript </label></div>
81977
81977
<div class="tabbed-content">
81978
81978
<div class="tabbed-block">
81979
81979
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
@@ -82281,6 +82281,60 @@ <h3 id="dijkstra">方法一:堆优化的 Dijkstra</h3>
82281
82281
<span class="kd">func</span><span class="w"> </span><span class="p">(</span><span class="nx">h</span><span class="w"> </span><span class="o">*</span><span class="nx">hp</span><span class="p">)</span><span class="w"> </span><span class="nx">Pop</span><span class="p">()</span><span class="w"> </span><span class="kt">any</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">a</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="o">*</span><span class="nx">h</span><span class="p">;</span><span class="w"> </span><span class="nx">v</span><span class="w"> </span><span class="o">:=</span><span class="w"> </span><span class="nx">a</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="nx">a</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">];</span><span class="w"> </span><span class="o">*</span><span class="nx">h</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">a</span><span class="p">[:</span><span class="nb">len</span><span class="p">(</span><span class="nx">a</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">];</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">v</span><span class="w"> </span><span class="p">}</span>
82282
82282
</code></pre></div></td></tr></table></div>
82283
82283
</div>
82284
+ <div class="tabbed-block">
82285
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
82286
+ <span class="normal"> 2</span>
82287
+ <span class="normal"> 3</span>
82288
+ <span class="normal"> 4</span>
82289
+ <span class="normal"> 5</span>
82290
+ <span class="normal"> 6</span>
82291
+ <span class="normal"> 7</span>
82292
+ <span class="normal"> 8</span>
82293
+ <span class="normal"> 9</span>
82294
+ <span class="normal">10</span>
82295
+ <span class="normal">11</span>
82296
+ <span class="normal">12</span>
82297
+ <span class="normal">13</span>
82298
+ <span class="normal">14</span>
82299
+ <span class="normal">15</span>
82300
+ <span class="normal">16</span>
82301
+ <span class="normal">17</span>
82302
+ <span class="normal">18</span>
82303
+ <span class="normal">19</span>
82304
+ <span class="normal">20</span>
82305
+ <span class="normal">21</span>
82306
+ <span class="normal">22</span>
82307
+ <span class="normal">23</span>
82308
+ <span class="normal">24</span>
82309
+ <span class="normal">25</span>
82310
+ <span class="normal">26</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kd">function</span><span class="w"> </span><span class="nx">minimumTime</span><span class="p">(</span><span class="nx">n</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">,</span><span class="w"> </span><span class="nx">edges</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">[][],</span><span class="w"> </span><span class="nx">disappear</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">[])</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">[]</span><span class="w"> </span><span class="p">{</span>
82311
+ <span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">g</span><span class="o">:</span><span class="w"> </span><span class="p">[</span><span class="kt">number</span><span class="p">,</span><span class="w"> </span><span class="kt">number</span><span class="p">][][]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Array</span><span class="p">.</span><span class="kr">from</span><span class="p">({</span><span class="w"> </span><span class="nx">length</span><span class="o">:</span><span class="w"> </span><span class="kt">n</span><span class="w"> </span><span class="p">},</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="p">[]);</span>
82312
+ <span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kd">const</span><span class="w"> </span><span class="p">[</span><span class="nx">u</span><span class="p">,</span><span class="w"> </span><span class="nx">v</span><span class="p">,</span><span class="w"> </span><span class="nx">w</span><span class="p">]</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="nx">edges</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
82313
+ <span class="w"> </span><span class="nx">g</span><span class="p">[</span><span class="nx">u</span><span class="p">].</span><span class="nx">push</span><span class="p">([</span><span class="nx">v</span><span class="p">,</span><span class="w"> </span><span class="nx">w</span><span class="p">]);</span>
82314
+ <span class="w"> </span><span class="nx">g</span><span class="p">[</span><span class="nx">v</span><span class="p">].</span><span class="nx">push</span><span class="p">([</span><span class="nx">u</span><span class="p">,</span><span class="w"> </span><span class="nx">w</span><span class="p">]);</span>
82315
+ <span class="w"> </span><span class="p">}</span>
82316
+ <span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">dist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Array</span><span class="p">.</span><span class="kr">from</span><span class="p">({</span><span class="w"> </span><span class="nx">length</span><span class="o">:</span><span class="w"> </span><span class="kt">n</span><span class="w"> </span><span class="p">},</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="kc">Infinity</span><span class="p">);</span>
82317
+ <span class="w"> </span><span class="nx">dist</span><span class="p">[</span><span class="mf">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0</span><span class="p">;</span>
82318
+ <span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">pq</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">PriorityQueue</span><span class="p">({</span>
82319
+ <span class="w"> </span><span class="nx">compare</span><span class="o">:</span><span class="w"> </span><span class="p">(</span><span class="nx">a</span><span class="p">,</span><span class="w"> </span><span class="nx">b</span><span class="p">)</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="p">(</span><span class="nx">a</span><span class="p">[</span><span class="mf">0</span><span class="p">]</span><span class="w"> </span><span class="o">===</span><span class="w"> </span><span class="nx">b</span><span class="p">[</span><span class="mf">0</span><span class="p">]</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="nx">a</span><span class="p">[</span><span class="mf">1</span><span class="p">]</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="nx">b</span><span class="p">[</span><span class="mf">1</span><span class="p">]</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="nx">a</span><span class="p">[</span><span class="mf">0</span><span class="p">]</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="nx">b</span><span class="p">[</span><span class="mf">0</span><span class="p">]),</span>
82320
+ <span class="w"> </span><span class="p">});</span>
82321
+ <span class="w"> </span><span class="nx">pq</span><span class="p">.</span><span class="nx">enqueue</span><span class="p">([</span><span class="mf">0</span><span class="p">,</span><span class="w"> </span><span class="mf">0</span><span class="p">]);</span>
82322
+ <span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="nx">pq</span><span class="p">.</span><span class="nx">size</span><span class="p">()</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mf">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
82323
+ <span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="p">[</span><span class="nx">du</span><span class="p">,</span><span class="w"> </span><span class="nx">u</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">pq</span><span class="p">.</span><span class="nx">dequeue</span><span class="p">()</span><span class="o">!</span><span class="p">;</span>
82324
+ <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">du</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="nx">dist</span><span class="p">[</span><span class="nx">u</span><span class="p">])</span><span class="w"> </span><span class="p">{</span>
82325
+ <span class="w"> </span><span class="k">continue</span><span class="p">;</span>
82326
+ <span class="w"> </span><span class="p">}</span>
82327
+ <span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kd">const</span><span class="w"> </span><span class="p">[</span><span class="nx">v</span><span class="p">,</span><span class="w"> </span><span class="nx">w</span><span class="p">]</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="nx">g</span><span class="p">[</span><span class="nx">u</span><span class="p">])</span><span class="w"> </span><span class="p">{</span>
82328
+ <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">dist</span><span class="p">[</span><span class="nx">v</span><span class="p">]</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="nx">dist</span><span class="p">[</span><span class="nx">u</span><span class="p">]</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">w</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="nx">dist</span><span class="p">[</span><span class="nx">u</span><span class="p">]</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">w</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="nx">disappear</span><span class="p">[</span><span class="nx">v</span><span class="p">])</span><span class="w"> </span><span class="p">{</span>
82329
+ <span class="w"> </span><span class="nx">dist</span><span class="p">[</span><span class="nx">v</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">dist</span><span class="p">[</span><span class="nx">u</span><span class="p">]</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">w</span><span class="p">;</span>
82330
+ <span class="w"> </span><span class="nx">pq</span><span class="p">.</span><span class="nx">enqueue</span><span class="p">([</span><span class="nx">dist</span><span class="p">[</span><span class="nx">v</span><span class="p">],</span><span class="w"> </span><span class="nx">v</span><span class="p">]);</span>
82331
+ <span class="w"> </span><span class="p">}</span>
82332
+ <span class="w"> </span><span class="p">}</span>
82333
+ <span class="w"> </span><span class="p">}</span>
82334
+ <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">dist</span><span class="p">.</span><span class="nx">map</span><span class="p">((</span><span class="nx">a</span><span class="p">,</span><span class="w"> </span><span class="nx">i</span><span class="p">)</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="p">(</span><span class="nx">a</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="nx">disappear</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="nx">a</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="o">-</span><span class="mf">1</span><span class="p">));</span>
82335
+ <span class="p">}</span>
82336
+ </code></pre></div></td></tr></table></div>
82337
+ </div>
82284
82338
</div>
82285
82339
</div>
82286
82340
<!-- solution:end -->
0 commit comments