mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-01-10 18:48:13 +08:00
74 lines
4.4 KiB
HTML
74 lines
4.4 KiB
HTML
<p>一个 <code>n</code> 个节点的无向树,节点编号为 <code>0</code> 到 <code>n - 1</code> ,树的根结点是 <code>0</code> 号节点。给你一个长度为 <code>n - 1</code> 的二维整数数组 <code>edges</code> ,其中 <code>edges[i] = [a<sub>i</sub>, b<sub>i</sub>]</code> ,表示节点 <code>a<sub>i</sub></code> 和 <code>b<sub>i</sub></code> 在树中有一条边。</p>
|
||
|
||
<p>在每一个节点 <code>i</code> 处有一扇门。同时给你一个都是偶数的数组 <code>amount</code> ,其中 <code>amount[i]</code> 表示:</p>
|
||
|
||
<ul>
|
||
<li>如果 <code>amount[i]</code> 的值是负数,那么它表示打开节点 <code>i</code> 处门扣除的分数。</li>
|
||
<li>如果 <code>amount[i]</code> 的值是正数,那么它表示打开节点 <code>i</code> 处门加上的分数。</li>
|
||
</ul>
|
||
|
||
<p>游戏按照如下规则进行:</p>
|
||
|
||
<ul>
|
||
<li>一开始,Alice 在节点 <code>0</code> 处,Bob 在节点 <code>bob</code> 处。</li>
|
||
<li>每一秒钟,Alice 和 Bob <strong>分别</strong> 移动到相邻的节点。Alice 朝着某个 <strong>叶子结点</strong> 移动,Bob 朝着节点 <code>0</code> 移动。</li>
|
||
<li>对于他们之间路径上的 <strong>每一个</strong> 节点,Alice 和 Bob 要么打开门并扣分,要么打开门并加分。注意:
|
||
<ul>
|
||
<li>如果门 <strong>已经打开</strong> (被另一个人打开),不会有额外加分也不会扣分。</li>
|
||
<li>如果 Alice 和 Bob <strong>同时</strong> 到达一个节点,他们会共享这个节点的加分或者扣分。换言之,如果打开这扇门扣 <code>c</code> 分,那么 Alice 和 Bob 分别扣 <code>c / 2</code> 分。如果这扇门的加分为 <code>c</code> ,那么他们分别加 <code>c / 2</code> 分。</li>
|
||
</ul>
|
||
</li>
|
||
<li>如果 Alice 到达了一个叶子结点,她会停止移动。类似的,如果 Bob 到达了节点 <code>0</code> ,他也会停止移动。注意这些事件互相 <strong>独立</strong> ,不会影响另一方移动。</li>
|
||
</ul>
|
||
|
||
<p>请你返回 Alice 朝最优叶子结点移动的 <strong>最大</strong> 净得分。</p>
|
||
|
||
<p> </p>
|
||
|
||
<p><strong>示例 1:</strong></p>
|
||
|
||
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/10/29/eg1.png" style="width: 275px; height: 275px;"></p>
|
||
|
||
<pre><b>输入:</b>edges = [[0,1],[1,2],[1,3],[3,4]], bob = 3, amount = [-2,4,2,-4,6]
|
||
<b>输出:</b>6
|
||
<b>解释:</b>
|
||
上图展示了输入给出的一棵树。游戏进行如下:
|
||
- Alice 一开始在节点 0 处,Bob 在节点 3 处。他们分别打开所在节点的门。
|
||
Alice 得分为 -2 。
|
||
- Alice 和 Bob 都移动到节点 1 。
|
||
因为他们同时到达这个节点,他们一起打开门并平分得分。
|
||
Alice 的得分变为 -2 + (4 / 2) = 0 。
|
||
- Alice 移动到节点 3 。因为 Bob 已经打开了这扇门,Alice 得分不变。
|
||
Bob 移动到节点 0 ,并停止移动。
|
||
- Alice 移动到节点 4 并打开这个节点的门,她得分变为 0 + 6 = 6 。
|
||
现在,Alice 和 Bob 都不能进行任何移动了,所以游戏结束。
|
||
Alice 无法得到更高分数。
|
||
</pre>
|
||
|
||
<p><strong>示例 2:</strong></p>
|
||
|
||
<p><img alt="" src="https://assets.leetcode.com/uploads/2022/10/29/eg2.png" style="width: 250px; height: 78px;"></p>
|
||
|
||
<pre><b>输入:</b>edges = [[0,1]], bob = 1, amount = [-7280,2350]
|
||
<b>输出:</b>-7280
|
||
<b>解释:</b>
|
||
Alice 按照路径 0->1 移动,同时 Bob 按照路径 1->0 移动。
|
||
所以 Alice 只打开节点 0 处的门,她的得分为 -7280 。
|
||
</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 <= a<sub>i</sub>, b<sub>i</sub> < n</code></li>
|
||
<li><code>a<sub>i</sub> != b<sub>i</sub></code></li>
|
||
<li><code>edges</code> 表示一棵有效的树。</li>
|
||
<li><code>1 <= bob < n</code></li>
|
||
<li><code>amount.length == n</code></li>
|
||
<li><code>amount[i]</code> 是范围 <code>[-10<sup>4</sup>, 10<sup>4</sup>]</code> 之间的一个 <strong>偶数</strong> 。</li>
|
||
</ul>
|