mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-10-23 22:08:58 +08:00
157 lines
6.6 KiB
HTML
157 lines
6.6 KiB
HTML
<p>You are given an integer <code>n</code> and an undirected 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>]</code> indicates an undirected edge between nodes <code>u<sub>i</sub></code> and <code>v<sub>i</sub></code>.</p>
|
|
|
|
<p>You are also given an integer array <code>nums</code>, where <code>nums[i]</code> is the positive integer assigned to node <code>i</code>.</p>
|
|
|
|
<p>Define a value <code>t<sub>i</sub></code> as the number of <strong>ancestors</strong> of node <code>i</code> such that the product <code>nums[i] * nums[ancestor]</code> is a <strong><span data-keyword="perfect-square">perfect square</span></strong>.</p>
|
|
|
|
<p>Return the sum of all <code>t<sub>i</sub></code> values for all nodes <code>i</code> in range <code>[1, n - 1]</code>.</p>
|
|
|
|
<p><strong>Note</strong>:</p>
|
|
|
|
<ul>
|
|
<li>In a rooted tree, the <strong>ancestors</strong> of node <code>i</code> are all nodes on the path from node <code>i</code> to the root node 0, <strong>excluding</strong> <code>i</code> itself.</li>
|
|
</ul>
|
|
|
|
<p> </p>
|
|
<p><strong class="example">Example 1:</strong></p>
|
|
|
|
<div class="example-block">
|
|
<p><strong>Input:</strong> <span class="example-io">n = 3, edges = [[0,1],[1,2]], nums = [2,8,2]</span></p>
|
|
|
|
<p><strong>Output:</strong> <span class="example-io">3</span></p>
|
|
|
|
<p><strong>Explanation:</strong></p>
|
|
|
|
<table style="border: 1px solid black;">
|
|
<thead>
|
|
<tr>
|
|
<th style="border: 1px solid black;"><code><strong>i</strong></code></th>
|
|
<th style="border: 1px solid black;"><strong>Ancestors</strong></th>
|
|
<th style="border: 1px solid black;"><code><strong>nums[i] * nums[ancestor]</strong></code></th>
|
|
<th style="border: 1px solid black;">Square Check</th>
|
|
<th style="border: 1px solid black;"><code><strong>t<sub>i</sub></strong></code></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="border: 1px solid black;">1</td>
|
|
<td style="border: 1px solid black;">[0]</td>
|
|
<td style="border: 1px solid black;"><code>nums[1] * nums[0] = 8 * 2 = 16</code></td>
|
|
<td style="border: 1px solid black;">16 is a perfect square</td>
|
|
<td style="border: 1px solid black;">1</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border: 1px solid black;">2</td>
|
|
<td style="border: 1px solid black;">[1, 0]</td>
|
|
<td style="border: 1px solid black;"><code>nums[2] * nums[1] = 2 * 8 = 16</code><br />
|
|
<code>nums[2] * nums[0] = 2 * 2 = 4</code></td>
|
|
<td style="border: 1px solid black;">Both 4 and 16 are perfect squares</td>
|
|
<td style="border: 1px solid black;">2</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p>Thus, the total number of valid ancestor pairs across all non-root nodes is <code>1 + 2 = 3</code>.</p>
|
|
</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],[0,2]], nums = [1,2,4]</span></p>
|
|
|
|
<p><strong>Output:</strong> <span class="example-io">1</span></p>
|
|
|
|
<p><strong>Explanation:</strong></p>
|
|
|
|
<table style="border: 1px solid black;">
|
|
<thead>
|
|
<tr>
|
|
<th style="border: 1px solid black;"><code><strong>i</strong></code></th>
|
|
<th style="border: 1px solid black;"><strong>Ancestors</strong></th>
|
|
<th style="border: 1px solid black;"><code><strong>nums[i] * nums[ancestor]</strong></code></th>
|
|
<th style="border: 1px solid black;">Square Check</th>
|
|
<th style="border: 1px solid black;"><code><strong>t<sub>i</sub></strong></code></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="border: 1px solid black;">1</td>
|
|
<td style="border: 1px solid black;">[0]</td>
|
|
<td style="border: 1px solid black;"><code>nums[1] * nums[0] = 2 * 1 = 2</code></td>
|
|
<td style="border: 1px solid black;">2 is <strong>not</strong> a perfect square</td>
|
|
<td style="border: 1px solid black;">0</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border: 1px solid black;">2</td>
|
|
<td style="border: 1px solid black;">[0]</td>
|
|
<td style="border: 1px solid black;"><code>nums[2] * nums[0] = 4 * 1 = 4</code></td>
|
|
<td style="border: 1px solid black;">4 is a perfect square</td>
|
|
<td style="border: 1px solid black;">1</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p data-end="996" data-start="929">Thus, the total number of valid ancestor pairs across all non-root nodes is 1.</p>
|
|
</div>
|
|
|
|
<p><strong class="example">Example 3:</strong></p>
|
|
|
|
<div class="example-block">
|
|
<p><strong>Input:</strong> <span class="example-io">n = 4, edges = [[0,1],[0,2],[1,3]], nums = [1,2,9,4]</span></p>
|
|
|
|
<p><strong>Output:</strong> <span class="example-io">2</span></p>
|
|
|
|
<p><strong>Explanation:</strong></p>
|
|
|
|
<table style="border: 1px solid black;">
|
|
<thead>
|
|
<tr>
|
|
<th style="border: 1px solid black;"><code>i</code></th>
|
|
<th style="border: 1px solid black;"><strong>Ancestors</strong></th>
|
|
<th style="border: 1px solid black;"><code><strong>nums[i] * nums[ancestor]</strong></code></th>
|
|
<th style="border: 1px solid black;">Square Check</th>
|
|
<th style="border: 1px solid black;"><code><strong>t<sub>i</sub></strong></code></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td style="border: 1px solid black;">1</td>
|
|
<td style="border: 1px solid black;">[0]</td>
|
|
<td style="border: 1px solid black;"><code>nums[1] * nums[0] = 2 * 1 = 2</code></td>
|
|
<td style="border: 1px solid black;">2 is <strong>not</strong> a perfect square</td>
|
|
<td style="border: 1px solid black;">0</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border: 1px solid black;">2</td>
|
|
<td style="border: 1px solid black;">[0]</td>
|
|
<td style="border: 1px solid black;"><code>nums[2] * nums[0] = 9 * 1 = 9</code></td>
|
|
<td style="border: 1px solid black;">9 is a perfect square</td>
|
|
<td style="border: 1px solid black;">1</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="border: 1px solid black;">3</td>
|
|
<td style="border: 1px solid black;">[1, 0]</td>
|
|
<td style="border: 1px solid black;"><code>nums[3] * nums[1] = 4 * 2 = 8</code><br />
|
|
<code>nums[3] * nums[0] = 4 * 1 = 4</code></td>
|
|
<td style="border: 1px solid black;">Only 4 is a perfect square</td>
|
|
<td style="border: 1px solid black;">1</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p>Thus, the total number of valid ancestor pairs across all non-root nodes is <code>0 + 1 + 1 = 2</code>.</p>
|
|
</div>
|
|
|
|
<p> </p>
|
|
<p><strong>Constraints:</strong></p>
|
|
|
|
<ul>
|
|
<li><code>1 <= 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>]</code></li>
|
|
<li><code>0 <= u<sub>i</sub>, v<sub>i</sub> <= n - 1</code></li>
|
|
<li><code>nums.length == n</code></li>
|
|
<li><code>1 <= nums[i] <= 10<sup>5</sup></code></li>
|
|
<li>The input is generated such that <code>edges</code> represents a valid tree.</li>
|
|
</ul>
|