There is an undirected tree with `n` nodes labeled from `0` to `n - 1`, rooted at node `0`. You are given a 2D integer array `edges` of length `n - 1` where `edges[i] = [ai, bi]` indicates that there is an edge between nodes `ai` and `bi` in the tree.

At every node `i`, there is a gate. You are also given an array of even integers `amount`, where `amount[i]` represents:

*   the price needed to open the gate at node `i`, if `amount[i]` is negative, or,
*   the cash reward obtained on opening the gate at node `i`, otherwise.

The game goes on as follows:

*   Initially, Alice is at node `0` and Bob is at node `bob`.
*   At every second, Alice and Bob **each** move to an adjacent node. Alice moves towards some **leaf node**, while Bob moves towards node `0`.
*   For **every** node along their path, Alice and Bob either spend money to open the gate at that node, or accept the reward. Note that:
    *   If the gate is **already open**, no price will be required, nor will there be any cash reward.
    *   If Alice and Bob reach the node **simultaneously**, they share the price/reward for opening the gate there. In other words, if the price to open the gate is `c`, then both Alice and Bob pay `c / 2` each. Similarly, if the reward at the gate is `c`, both of them receive `c / 2` each.
*   If Alice reaches a leaf node, she stops moving. Similarly, if Bob reaches node `0`, he stops moving. Note that these events are **independent** of each other.

Return _the **maximum** net income Alice can have if she travels towards the optimal leaf node._

**Example 1:**

**Input:** edges = \[\[0,1\],\[1,2\],\[1,3\],\[3,4\]\], bob = 3, amount = \[-2,4,2,-4,6\]
**Output:** 6
**Explanation:** 
The above diagram represents the given tree. The game goes as follows:
- Alice is initially on node 0, Bob on node 3. They open the gates of their respective nodes.
  Alice's net income is now -2.
- Both Alice and Bob move to node 1. 
  Since they reach here simultaneously, they open the gate together and share the reward.
  Alice's net income becomes -2 + (4 / 2) = 0.
- Alice moves on to node 3. Since Bob already opened its gate, Alice's income remains unchanged.
  Bob moves on to node 0, and stops moving.
- Alice moves on to node 4 and opens the gate there. Her net income becomes 0 + 6 = 6.
Now, neither Alice nor Bob can make any further moves, and the game ends.
It is not possible for Alice to get a higher net income.

**Example 2:**

**Input:** edges = \[\[0,1\]\], bob = 1, amount = \[-7280,2350\]
**Output:** -7280
**Explanation:** 
Alice follows the path 0->1 whereas Bob follows the path 1->0.
Thus, Alice opens the gate at node 0 only. Hence, her net income is -7280. 

**Constraints:**

*   `2 <= n <= 105`
*   `edges.length == n - 1`
*   `edges[i].length == 2`
*   `0 <= ai, bi < n`
*   `ai != bi`
*   `edges` represents a valid tree.
*   `1 <= bob < n`
*   `amount.length == n`
*   `amount[i]` is an **even** integer in the range `[-104, 104]`.

노드 `0`에 뿌리를 두고 `0`에서 `n - 1`까지 레이블이 붙은 `n`개의 노드를 가진 방향이 없는 트리가 있습니다. 길이 `n - 1`의 2D 정수 배열 `에지`가 주어지며, 여기서 `에지[i] = [ai, bi]`는 트리의 노드 `ai`와 `bi` 사이에 에지가 있음을 나타냅니다.

모든 노드 `i`에는 게이트가 있습니다. 또한 짝수 정수 배열인 `amount`가 주어지며, `amount[i]`는 이를 나타냅니다:

* 노드 `i`에서 게이트를 여는 데 필요한 가격(`amount[i]`가 음수인 경우), 또는,
* 노드 `i`에서 게이트를 열었을 때 얻은 현금 보상, 그렇지 않으면.

게임은 다음과 같이 진행됩니다:

* 처음에 앨리스는 노드 `0`에 있고 밥은 노드 `밥`에 있습니다.
* 매 초마다 앨리스와 밥은 **각각** 인접한 노드로 이동합니다. 앨리스는 어떤 **잎 노드**로 이동하고, 밥은 노드 `0`으로 이동합니다.
* 앨리스와 밥은 이동 경로의 **모든** 노드에 대해 돈을 써서 해당 노드의 문을 열거나 보상을 받습니다. 주의하세요:
    * 게이트가 **이미 열려있는** 경우, 가격이 필요하지 않으며 현금 보상도 없습니다.
    * 앨리스와 밥이 해당 노드에 **동시에** 도달하면, 두 사람은 해당 노드에서 게이트를 여는 데 드는 가격/보상을 공유합니다. 즉, 게이트를 여는 데 드는 가격이 'c'라면 앨리스와 밥은 각각 'c / 2'를 지불합니다. 마찬가지로, 게이트의 보상이 `c`이면 두 사람 모두 각각 `c / 2`를 받습니다.
* 앨리스가 나뭇잎 노드에 도달하면 앨리스는 이동을 멈춥니다. 마찬가지로 밥이 노드 `0`에 도달하면 이동을 멈춥니다. 이러한 이벤트는 서로 **독립적**이라는 점에 유의하세요.

앨리스가 최적의 잎 노드를 향해 이동할 때 얻을 수 있는 **최대** 순이익을 반환합니다.

**예제 1:**

**Input:** edges = \[\[0,1\],\[1,2\],\[1,3\],\[3,4\]\], bob = 3, amount = \[-2,4,2,-4,6\]
**출력:** 6
**설명:**
위의 다이어그램은 주어진 트리를 나타냅니다. 게임은 다음과 같이 진행됩니다:
- 처음에 앨리스는 노드 0에, 밥은 노드 3에 있습니다. 두 사람은 각 노드의 문을 엽니다.
  이제 앨리스의 순이익은 -2입니다.
- 앨리스와 밥은 모두 노드 1로 이동합니다.
  동시에 이곳에 도착했기 때문에 두 사람은 함께 문을 열고 보상을 공유합니다.
  앨리스의 순소득은 -2 + (4 / 2) = 0이 됩니다.
- 앨리스는 노드 3으로 이동합니다. 밥이 이미 문을 열었으므로 앨리스의 수입은 변하지 않습니다.
  밥은 노드 0으로 이동한 후 이동을 멈춥니다.
- 앨리스는 노드 4로 이동하여 그곳에서 문을 엽니다. 앨리스의 순소득은 0 + 6 = 6이 됩니다.
이제 앨리스와 밥은 더 이상 움직일 수 없으며 게임이 종료됩니다.
앨리스가 더 높은 순소득을 얻는 것은 불가능합니다.

**예제 2:**

**입력:** edges = \[\[0,1\]\], bob = 1, amount = \[-7280,2350\]
**출력:** -7280
**설명:**
앨리스는 0->1 경로를 따르는 반면 밥은 1->0 경로를 따릅니다.
따라서 앨리스는 노드 0에서만 게이트를 엽니다. 따라서 그녀의 순이익은 -7280입니다.

**제약 조건:**

* `2 <= n <= 105`
* `edges.length == n - 1`
* `edges[i].length == 2`
* `0 <= ai, bi < n`
* `ai != bi`
* `edges`는 유효한 트리를 나타냅니다.
* `1 <= 밥 < n`
* `amount.length == n`
* `amount[i]`는 `[-104, 104]` 범위의 **짝수** 정수입니다.
