1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-09-12 02:41:42 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
Files
leetcode-problemset/leetcode-cn/problem (English)/树中找到带权中位节点(English) [find-weighted-median-node-in-tree].html
2025-06-18 01:10:28 +08:00

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>&nbsp;</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 &rarr; 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 &rarr; 0 = 7 &gt;= 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 &rarr; 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 &rarr; 1 = 7 &gt;= 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 &rarr; 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 &rarr; 1 = 2 &gt;= 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 &rarr; 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 &rarr; 0 = 4 &gt;= 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 &rarr; 0 &rarr; 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 &rarr; 0 = 2 &lt; 3</code>.<br />
Sum from <code>1 &rarr; 2 = 2 + 4 = 6 &gt;= 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 &rarr; 1 &rarr; 0 &rarr; 2 &rarr; 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 &rarr; 1 = 1 &lt; 5.5</code>.<br />
Sum from <code>3 &rarr; 0 = 1 + 2 = 3 &lt; 5.5</code>.<br />
Sum from <code>3 &rarr; 2 = 1 + 2 + 5 = 8 &gt;= 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 &rarr; 0 &rarr; 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 &rarr; 0 = 2 &lt; 3.5</code>.<br />
Sum from <code>1 &rarr; 2 = 2 + 5 = 7 &gt;= 3.5</code>, median is node 2.</p>
</td>
<td style="border: 1px solid black;">2</td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>
<ul>
<li><code>2 &lt;= n &lt;= 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 &lt;= u<sub>i</sub>, v<sub>i</sub> &lt; n</code></li>
<li><code>1 &lt;= w<sub>i</sub> &lt;= 10<sup>9</sup></code></li>
<li><code>1 &lt;= queries.length &lt;= 10<sup>5</sup></code></li>
<li><code>queries[j] == [u<sub>j</sub>, v<sub>j</sub>]</code></li>
<li><code>0 &lt;= u<sub>j</sub>, v<sub>j</sub> &lt; n</code></li>
<li>The input is generated such that <code>edges</code> represents a valid tree.</li>
</ul>