mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-09-12 02:41:42 +08:00
186 lines
8.2 KiB
HTML
186 lines
8.2 KiB
HTML
<p>You are given an integer <code>n</code> and an <strong>undirected, weighted</strong> tree rooted at node 0 with <code>n</code> nodes numbered from 0 to <code>n - 1</code>. This is represented by a 2D array <code>edges</code> of length <code>n - 1</code>, where <code>edges[i] = [u<sub>i</sub>, v<sub>i</sub>, w<sub>i</sub>]</code> indicates an edge from node <code>u<sub>i</sub></code> to <code>v<sub>i</sub></code> with weight <code>w<sub>i</sub></code>.</p>
|
|
|
|
<p>The <strong>weighted median node</strong> is defined as the <strong>first</strong> node <code>x</code> on the path from <code>u<sub>i</sub></code> to <code>v<sub>i</sub></code> such that the sum of edge weights from <code>u<sub>i</sub></code> to <code>x</code> is <strong>greater than or equal to half</strong> of the total path weight.</p>
|
|
|
|
<p>You are given a 2D integer array <code>queries</code>. For each <code>queries[j] = [u<sub>j</sub>, v<sub>j</sub>]</code>, determine the weighted median node along the path from <code>u<sub>j</sub></code> to <code>v<sub>j</sub></code>.</p>
|
|
|
|
<p>Return an array <code>ans</code>, where <code>ans[j]</code> is the node index of the weighted median for <code>queries[j]</code>.</p>
|
|
|
|
<p> </p>
|
|
<p><strong class="example">Example 1:</strong></p>
|
|
|
|
<div class="example-block">
|
|
<p><strong>Input:</strong> <span class="example-io">n = 2, edges = [[0,1,7]], queries = [[1,0],[0,1]]</span></p>
|
|
|
|
<p><strong>Output:</strong> <span class="example-io">[0,1]</span></p>
|
|
|
|
<p><strong>Explanation:</strong></p>
|
|
|
|
<p><img src="https://assets.leetcode.com/uploads/2025/05/26/screenshot-2025-05-26-at-193447.png" style="width: 200px; height: 64px;" /></p>
|
|
|
|
<table style="border: 1px solid black;">
|
|
<thead>
|
|
<tr>
|
|
<th style="border: 1px solid black;">Query</th>
|
|
<th style="border: 1px solid black;">Path</th>
|
|
<th style="border: 1px solid black;">Edge<br />
|
|
Weights</th>
|
|
<th style="border: 1px solid black;">Total<br />
|
|
Path<br />
|
|
Weight</th>
|
|
<th style="border: 1px solid black;">Half</th>
|
|
<th style="border: 1px solid black;">Explanation</th>
|
|
<th style="border: 1px solid black;">Answer</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="border: 1px solid black;"><code>[1, 0]</code></td>
|
|
<td style="border: 1px solid black;"><code>1 → 0</code></td>
|
|
<td style="border: 1px solid black;"><code>[7]</code></td>
|
|
<td style="border: 1px solid black;">7</td>
|
|
<td style="border: 1px solid black;">3.5</td>
|
|
<td style="border: 1px solid black;">Sum from <code>1 → 0 = 7 >= 3.5</code>, median is node 0.</td>
|
|
<td style="border: 1px solid black;">0</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border: 1px solid black;"><code>[0, 1]</code></td>
|
|
<td style="border: 1px solid black;"><code>0 → 1</code></td>
|
|
<td style="border: 1px solid black;"><code>[7]</code></td>
|
|
<td style="border: 1px solid black;">7</td>
|
|
<td style="border: 1px solid black;">3.5</td>
|
|
<td style="border: 1px solid black;">Sum from <code>0 → 1 = 7 >= 3.5</code>, median is node 1.</td>
|
|
<td style="border: 1px solid black;">1</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<p><strong class="example">Example 2:</strong></p>
|
|
|
|
<div class="example-block">
|
|
<p><strong>Input:</strong> <span class="example-io">n = 3, edges = [[0,1,2],[2,0,4]], queries = [[0,1],[2,0],[1,2]]</span></p>
|
|
|
|
<p><strong>Output:</strong> <span class="example-io">[1,0,2]</span></p>
|
|
|
|
<p><strong>E</strong><strong>xplanation:</strong></p>
|
|
|
|
<p><img src="https://assets.leetcode.com/uploads/2025/05/26/screenshot-2025-05-26-at-193610.png" style="width: 180px; height: 149px;" /></p>
|
|
|
|
<table style="border: 1px solid black;">
|
|
<thead>
|
|
<tr>
|
|
<th style="border: 1px solid black;">Query</th>
|
|
<th style="border: 1px solid black;">Path</th>
|
|
<th style="border: 1px solid black;">Edge<br />
|
|
Weights</th>
|
|
<th style="border: 1px solid black;">Total<br />
|
|
Path<br />
|
|
Weight</th>
|
|
<th style="border: 1px solid black;">Half</th>
|
|
<th style="border: 1px solid black;">Explanation</th>
|
|
<th style="border: 1px solid black;">Answer</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="border: 1px solid black;"><code>[0, 1]</code></td>
|
|
<td style="border: 1px solid black;"><code>0 → 1</code></td>
|
|
<td style="border: 1px solid black;"><code>[2]</code></td>
|
|
<td style="border: 1px solid black;">2</td>
|
|
<td style="border: 1px solid black;">1</td>
|
|
<td style="border: 1px solid black;">Sum from <code>0 → 1 = 2 >= 1</code>, median is node 1.</td>
|
|
<td style="border: 1px solid black;">1</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border: 1px solid black;"><code>[2, 0]</code></td>
|
|
<td style="border: 1px solid black;"><code>2 → 0</code></td>
|
|
<td style="border: 1px solid black;"><code>[4]</code></td>
|
|
<td style="border: 1px solid black;">4</td>
|
|
<td style="border: 1px solid black;">2</td>
|
|
<td style="border: 1px solid black;">Sum from <code>2 → 0 = 4 >= 2</code>, median is node 0.</td>
|
|
<td style="border: 1px solid black;">0</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border: 1px solid black;"><code>[1, 2]</code></td>
|
|
<td style="border: 1px solid black;"><code>1 → 0 → 2</code></td>
|
|
<td style="border: 1px solid black;"><code>[2, 4]</code></td>
|
|
<td style="border: 1px solid black;">6</td>
|
|
<td style="border: 1px solid black;">3</td>
|
|
<td style="border: 1px solid black;">Sum from <code>1 → 0 = 2 < 3</code>.<br />
|
|
Sum from <code>1 → 2 = 2 + 4 = 6 >= 3</code>, median is node 2.</td>
|
|
<td style="border: 1px solid black;">2</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<p><strong class="example">Example 3:</strong></p>
|
|
|
|
<div class="example-block">
|
|
<p><strong>Input:</strong> <span class="example-io">n = 5, edges = [[0,1,2],[0,2,5],[1,3,1],[2,4,3]], queries = [[3,4],[1,2]]</span></p>
|
|
|
|
<p><strong>Output:</strong> <span class="example-io">[2,2]</span></p>
|
|
|
|
<p><strong>Explanation:</strong></p>
|
|
|
|
<p><img src="https://assets.leetcode.com/uploads/2025/05/26/screenshot-2025-05-26-at-193857.png" style="width: 150px; height: 229px;" /></p>
|
|
|
|
<table style="border: 1px solid black;">
|
|
<thead>
|
|
<tr>
|
|
<th style="border: 1px solid black;">Query</th>
|
|
<th style="border: 1px solid black;">Path</th>
|
|
<th style="border: 1px solid black;">Edge<br />
|
|
Weights</th>
|
|
<th style="border: 1px solid black;">Total<br />
|
|
Path<br />
|
|
Weight</th>
|
|
<th style="border: 1px solid black;">Half</th>
|
|
<th style="border: 1px solid black;">Explanation</th>
|
|
<th style="border: 1px solid black;">Answer</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="border: 1px solid black;"><code>[3, 4]</code></td>
|
|
<td style="border: 1px solid black;"><code>3 → 1 → 0 → 2 → 4</code></td>
|
|
<td style="border: 1px solid black;"><code>[1, 2, 5, 3]</code></td>
|
|
<td style="border: 1px solid black;">11</td>
|
|
<td style="border: 1px solid black;">5.5</td>
|
|
<td style="border: 1px solid black;">Sum from <code>3 → 1 = 1 < 5.5</code>.<br />
|
|
Sum from <code>3 → 0 = 1 + 2 = 3 < 5.5</code>.<br />
|
|
Sum from <code>3 → 2 = 1 + 2 + 5 = 8 >= 5.5</code>, median is node 2.</td>
|
|
<td style="border: 1px solid black;">2</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border: 1px solid black;"><code>[1, 2]</code></td>
|
|
<td style="border: 1px solid black;"><code>1 → 0 → 2</code></td>
|
|
<td style="border: 1px solid black;"><code>[2, 5]</code></td>
|
|
<td style="border: 1px solid black;">7</td>
|
|
<td style="border: 1px solid black;">3.5</td>
|
|
<td style="border: 1px solid black;">
|
|
<p>Sum from <code>1 → 0 = 2 < 3.5</code>.<br />
|
|
Sum from <code>1 → 2 = 2 + 5 = 7 >= 3.5</code>, median is node 2.</p>
|
|
</td>
|
|
<td style="border: 1px solid black;">2</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
<p> </p>
|
|
<p><strong>Constraints:</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] == [u<sub>i</sub>, v<sub>i</sub>, w<sub>i</sub>]</code></li>
|
|
<li><code>0 <= u<sub>i</sub>, v<sub>i</sub> < n</code></li>
|
|
<li><code>1 <= w<sub>i</sub> <= 10<sup>9</sup></code></li>
|
|
<li><code>1 <= queries.length <= 10<sup>5</sup></code></li>
|
|
<li><code>queries[j] == [u<sub>j</sub>, v<sub>j</sub>]</code></li>
|
|
<li><code>0 <= u<sub>j</sub>, v<sub>j</sub> < n</code></li>
|
|
<li>The input is generated such that <code>edges</code> represents a valid tree.</li>
|
|
</ul>
|