From 457c4b48ad013752e32a04c0a8fd6a5729757a8b Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Thu, 24 Jul 2025 09:35:15 +0800 Subject: [PATCH] Add solution and test-cases for problem 2322 --- .../1.png | Bin 0 -> 20524 bytes .../2.png | Bin 0 -> 16868 bytes .../README.md | 48 +++++-- .../Solution.go | 120 +++++++++++++++++- .../Solution_test.go | 24 ++-- 5 files changed, 166 insertions(+), 26 deletions(-) create mode 100644 leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/1.png create mode 100644 leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/2.png diff --git a/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/1.png b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/1.png new file mode 100644 index 0000000000000000000000000000000000000000..b25151a621839d3ea7e74f4163c106ac8f1bfa72 GIT binary patch literal 20524 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 literal 0 HcmV?d00001 diff --git a/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/README.md b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/README.md index 0bc3f2043..d74d077d7 100755 --- a/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/README.md +++ b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/README.md @@ -1,28 +1,48 @@ # [2322.Minimum Score After Removals on a Tree][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +There is an undirected connected tree with n nodes labeled from `0` to `n - 1` and `n - 1` edges. + +You are given a **0-indexed** integer array `nums` of length `n` where `nums[i]` represents the value of the `ith` node. You are also 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. + +Remove two **distinct** edges of the tree to form three connected components. For a pair of removed edges, the following steps are defined: + +1. Get the XOR of all the values of the nodes for **each** of the three components respectively. +2. The **difference** between the **largest** XOR value and the **smallest** XOR value is the **score** of the pair. + +- For example, say the three components have the node values: `[4,5,7], [1,9], and [3,3,3]`. The three XOR values are `4 ^ 5 ^ 7 = 6`, `1 ^ 9 = 8`, and `3 ^ 3 ^ 3 = 3`. The largest XOR value is `8` and the smallest XOR value is `3`. The score is then `8 - 3 = 5`. -**Example 1:** +Return the **minimum** score of any possible pair of edge removals on the given tree. + +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: nums = [1,5,5,4,11], edges = [[0,1],[1,2],[1,3],[3,4]] +Output: 9 +Explanation: The diagram above shows a way to make a pair of removals. +- The 1st component has nodes [1,3,4] with values [5,4,11]. Its XOR value is 5 ^ 4 ^ 11 = 10. +- The 2nd component has node [0] with value [1]. Its XOR value is 1 = 1. +- The 3rd component has node [2] with value [5]. Its XOR value is 5 = 5. +The score is the difference between the largest and smallest XOR value which is 10 - 1 = 9. +It can be shown that no other pair of removals will obtain a smaller score than 9. ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.png) -### 思路1 -> ... -Minimum Score After Removals on a Tree -```go ``` - +Input: nums = [5,5,2,4,4,2], edges = [[0,1],[1,2],[5,2],[4,3],[1,3]] +Output: 0 +Explanation: The diagram above shows a way to make a pair of removals. +- The 1st component has nodes [3,4] with values [4,4]. Its XOR value is 4 ^ 4 = 0. +- The 2nd component has nodes [1,0] with values [5,5]. Its XOR value is 5 ^ 5 = 0. +- The 3rd component has nodes [2,5] with values [2,2]. Its XOR value is 2 ^ 2 = 0. +The score is the difference between the largest and smallest XOR value which is 0 - 0 = 0. +We cannot obtain a smaller score than 0. +``` ## 结语 diff --git a/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution.go b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution.go index d115ccf5e..775495e53 100644 --- a/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution.go +++ b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution.go @@ -1,5 +1,121 @@ package Solution -func Solution(x bool) bool { - return x +import ( + "math" + "sort" +) + +// minimumScore calculates the minimum score achievable by removing two distinct edges from a tree. +// The score is defined as the difference between the largest and smallest XOR values of the three resulting components. +func Solution(nums []int, edges [][]int) int { + n := len(nums) // Number of nodes + + // 1. Build adjacency list for graph traversal + adj := make([][]int, n) + for _, edge := range edges { + u, v := edge[0], edge[1] + adj[u] = append(adj[u], v) + adj[v] = append(adj[v], u) // Undirected graph + } + + // 2. Calculate the total XOR sum of all node values + totalXorSum := 0 + for _, num := range nums { + totalXorSum ^= num + } + + // 3. Prepare slices for DFS pre-calculation + // subtreeXor[i]: XOR sum of nodes in the subtree rooted at i (including i) + subtreeXor := make([]int, n) + // tin[i]: Entry time of node i in DFS traversal + tin := make([]int, n) + // tout[i]: Exit time of node i in DFS traversal (after visiting all its descendants) + tout := make([]int, n) + timer := 0 // Global timer for assigning tin/tout values + + // DFS function to compute subtreeXor, tin, and tout + var dfs func(u, p int) // u: current node, p: parent node + dfs = func(u, p int) { + timer++ + tin[u] = timer // Mark entry time for node u + + subtreeXor[u] = nums[u] // Initialize subtree XOR with current node's value + + // Traverse all neighbors of u + for _, v := range adj[u] { + if v == p { // Skip if v is the parent of u + continue + } + dfs(v, u) // Recursively call DFS for child v + subtreeXor[u] ^= subtreeXor[v] // Aggregate child's subtree XOR into current node's + } + + timer++ + tout[u] = timer // Mark exit time for node u + } + + // Start DFS from node 0 (arbitrary root), with -1 as its virtual parent + dfs(0, -1) + + // Initialize minimum score to a very large value + minScore := math.MaxInt32 + + // 4. Enumerate all possible pairs of distinct nodes (i, j) + // These nodes represent the "roots" of the two subtrees that will be cut off. + // The edges being cut are implicitly (parent[i], i) and (parent[j], j). + // We start from node 1 because node 0 is the root and does not have a "parent edge" to cut. + for i := 1; i < n; i++ { + for j := i + 1; j < n; j++ { // j must be different from i + + // Check if i is an ancestor of j using DFS timestamps + // (tin[i] < tin[j] and tout[i] > tout[j]) + isIAncestorOfJ := (tin[i] < tin[j] && tout[i] > tout[j]) + // Check if j is an ancestor of i using DFS timestamps + isJAncestorOfI := (tin[j] < tin[i] && tout[j] > tout[i]) + + var xorVal1, xorVal2, xorVal3 int // The three component XOR sums + + if isIAncestorOfJ { + // Case 1: Node i is an ancestor of node j. + // This means j's subtree is entirely contained within i's subtree. + // The three components are: + // - Component A: The subtree rooted at j. (xorVal1) + // - Component B: The part of i's subtree *outside* j's subtree. (xorVal2) + // - Component C: The rest of the tree (outside i's subtree). (xorVal3) + xorVal1 = subtreeXor[j] + xorVal2 = subtreeXor[i] ^ subtreeXor[j] // XOR sum of i's subtree excluding j's subtree + xorVal3 = totalXorSum ^ subtreeXor[i] // Total XOR sum excluding i's subtree + } else if isJAncestorOfI { + // Case 2: Node j is an ancestor of node i. + // This is symmetric to Case 1. Swap roles of i and j for calculation. + xorVal1 = subtreeXor[i] + xorVal2 = subtreeXor[j] ^ subtreeXor[i] // XOR sum of j's subtree excluding i's subtree + xorVal3 = totalXorSum ^ subtreeXor[j] // Total XOR sum excluding j's subtree + } else { + // Case 3: Nodes i and j are not ancestors of each other. + // Their respective subtrees are disjoint. + // The three components are: + // - Component A: The subtree rooted at i. (xorVal1) + // - Component B: The subtree rooted at j. (xorVal2) + // - Component C: The rest of the tree (outside both i's and j's subtrees). (xorVal3) + xorVal1 = subtreeXor[i] + xorVal2 = subtreeXor[j] + xorVal3 = totalXorSum ^ subtreeXor[i] ^ subtreeXor[j] // Total XOR sum excluding both i's and j's subtrees + } + + // Store the three XOR values in a slice, sort them, and calculate the difference. + currentXors := []int{xorVal1, xorVal2, xorVal3} + sort.Ints(currentXors) // Sort to easily find min and max + + // Calculate the score for this pair of edge removals + diff := currentXors[2] - currentXors[0] // Largest XOR - Smallest XOR + + // Update the minimum score found so far + if diff < minScore { + minScore = diff + } + } + } + + return minScore } diff --git a/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution_test.go b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution_test.go index 14ff50eb4..d41e511cc 100644 --- a/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution_test.go +++ b/leetcode/2301-2400/2322.Minimum-Score-After-Removals-on-a-Tree/Solution_test.go @@ -10,30 +10,34 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + nums []int + edges [][]int + expect int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", []int{1, 5, 5, 4, 11}, [][]int{ + {0, 1}, {1, 2}, {1, 3}, {3, 4}, + }, 9}, + {"TestCase2", []int{5, 5, 2, 4, 4, 2}, [][]int{ + {0, 1}, {1, 2}, {5, 2}, {4, 3}, {1, 3}, + }, 0}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.nums, c.edges) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.nums, c.edges) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }