From a4cf89ef9251d881882f27a356373eecc18679b3 Mon Sep 17 00:00:00 2001 From: yanglbme Date: Wed, 9 Oct 2024 09:30:18 +0800 Subject: [PATCH 1/2] feat: add solutions to lc problem: No.3313 No.3313.Find the Last Marked Nodes in Tree --- .../README.md" | 4 +- .../README.md" | 8 +- .../README.md" | 2 +- .../1400-1499/1436.Destination City/README.md | 2 +- .../1436.Destination City/README_EN.md | 2 +- .../README_EN.md | 4 +- .../README.md | 114 ------ .../README_EN.md | 112 ------ .../README.md | 349 ++++++++++++++++++ .../README_EN.md | 349 ++++++++++++++++++ .../Solution.cpp | 44 +++ .../Solution.go | 47 +++ .../Solution.java | 52 +++ .../Solution.py | 29 ++ .../Solution.ts | 33 ++ .../images/screenshot-2024-06-02-122236.png | Bin 0 -> 9118 bytes .../images/screenshot-2024-06-02-122249.png | Bin 0 -> 5935 bytes .../images/screenshot-2024-06-03-210550.png | Bin 0 -> 15011 bytes solution/README.md | 1 + solution/README_EN.md | 1 + 20 files changed, 916 insertions(+), 237 deletions(-) delete mode 100644 solution/3100-3199/3171.Find Subarray With Bitwise AND Closest to K/README.md delete mode 100644 solution/3100-3199/3171.Find Subarray With Bitwise AND Closest to K/README_EN.md create mode 100644 solution/3300-3399/3313.Find the Last Marked Nodes in Tree/README.md create mode 100644 solution/3300-3399/3313.Find the Last Marked Nodes in Tree/README_EN.md create mode 100644 solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.cpp create mode 100644 solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.go create mode 100644 solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.java create mode 100644 solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.py create mode 100644 solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.ts create mode 100644 solution/3300-3399/3313.Find the Last Marked Nodes in Tree/images/screenshot-2024-06-02-122236.png create mode 100644 solution/3300-3399/3313.Find the Last Marked Nodes in Tree/images/screenshot-2024-06-02-122249.png create mode 100644 solution/3300-3399/3313.Find the Last Marked Nodes in Tree/images/screenshot-2024-06-03-210550.png diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 101. \345\210\206\345\211\262\347\255\211\345\222\214\345\255\220\344\270\262/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 101. \345\210\206\345\211\262\347\255\211\345\222\214\345\255\220\344\270\262/README.md" index 95a8fabffb8e4..d0b0ddcf37551 100644 --- "a/lcof2/\345\211\221\346\214\207 Offer II 101. \345\210\206\345\211\262\347\255\211\345\222\214\345\255\220\344\270\262/README.md" +++ "b/lcof2/\345\211\221\346\214\207 Offer II 101. \345\210\206\345\211\262\347\255\211\345\222\214\345\255\220\344\270\262/README.md" @@ -166,13 +166,13 @@ class Solution { let target = s / 2 var dp = Array(repeating: false, count: target + 1) dp[0] = true - + for num in nums { for j in stride(from: target, through: num, by: -1) { dp[j] = dp[j] || dp[j - num] } } - + return dp[target] } } diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 102. \345\212\240\345\207\217\347\232\204\347\233\256\346\240\207\345\200\274/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 102. \345\212\240\345\207\217\347\232\204\347\233\256\346\240\207\345\200\274/README.md" index 641d95bc70115..c9fd89e167210 100644 --- "a/lcof2/\345\211\221\346\214\207 Offer II 102. \345\212\240\345\207\217\347\232\204\347\233\256\346\240\207\345\200\274/README.md" +++ "b/lcof2/\345\211\221\346\214\207 Offer II 102. \345\212\240\345\207\217\347\232\204\347\233\256\346\240\207\345\200\274/README.md" @@ -171,13 +171,13 @@ class Solution { if target < -1000 || target > 1000 { return 0 } - + let n = nums.count var dp = Array(repeating: Array(repeating: 0, count: 2001), count: n) - + dp[0][nums[0] + 1000] += 1 dp[0][-nums[0] + 1000] += 1 - + for i in 1.. 0 { @@ -186,7 +186,7 @@ class Solution { } } } - + return dp[n - 1][target + 1000] } } diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 105. \345\262\233\345\261\277\347\232\204\346\234\200\345\244\247\351\235\242\347\247\257/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 105. \345\262\233\345\261\277\347\232\204\346\234\200\345\244\247\351\235\242\347\247\257/README.md" index 1b5cd251005db..cc606dc3f2369 100644 --- "a/lcof2/\345\211\221\346\214\207 Offer II 105. \345\262\233\345\261\277\347\232\204\346\234\200\345\244\247\351\235\242\347\247\257/README.md" +++ "b/lcof2/\345\211\221\346\214\207 Offer II 105. \345\262\233\345\261\277\347\232\204\346\234\200\345\244\247\351\235\242\347\247\257/README.md" @@ -281,7 +281,7 @@ class Solution { var area = 1 grid[i][j] = 0 let dirs = [-1, 0, 1, 0, -1] - + for k in 0..<4 { let x = i + dirs[k], y = j + dirs[k + 1] if x >= 0 && x < m && y >= 0 && y < n { diff --git a/solution/1400-1499/1436.Destination City/README.md b/solution/1400-1499/1436.Destination City/README.md index 4045d36857444..05b7f23d82aa1 100644 --- a/solution/1400-1499/1436.Destination City/README.md +++ b/solution/1400-1499/1436.Destination City/README.md @@ -30,7 +30,7 @@ tags:
 输入:paths = [["London","New York"],["New York","Lima"],["Lima","Sao Paulo"]]
-输出:"Sao Paulo"
+输出:"Sao Paulo" 
 解释:从 "London" 出发,最后抵达终点站 "Sao Paulo" 。本次旅行的路线是 "London" -> "New York" -> "Lima" -> "Sao Paulo" 。
 
diff --git a/solution/1400-1499/1436.Destination City/README_EN.md b/solution/1400-1499/1436.Destination City/README_EN.md index f582e96cc51f5..6586ccb29e42e 100644 --- a/solution/1400-1499/1436.Destination City/README_EN.md +++ b/solution/1400-1499/1436.Destination City/README_EN.md @@ -29,7 +29,7 @@ tags:
 Input: paths = [["London","New York"],["New York","Lima"],["Lima","Sao Paulo"]]
-Output: "Sao Paulo"
+Output: "Sao Paulo" 
 Explanation: Starting at "London" city you will reach "Sao Paulo" city which is the destination city. Your trip consist of: "London" -> "New York" -> "Lima" -> "Sao Paulo".
 
diff --git a/solution/2100-2199/2161.Partition Array According to Given Pivot/README_EN.md b/solution/2100-2199/2161.Partition Array According to Given Pivot/README_EN.md index f5c884470e37a..aa3d24ab87aa8 100644 --- a/solution/2100-2199/2161.Partition Array According to Given Pivot/README_EN.md +++ b/solution/2100-2199/2161.Partition Array According to Given Pivot/README_EN.md @@ -40,7 +40,7 @@ tags:
 Input: nums = [9,12,5,10,14,3,10], pivot = 10
 Output: [9,5,3,10,10,12,14]
-Explanation:
+Explanation: 
 The elements 9, 5, and 3 are less than the pivot so they are on the left side of the array.
 The elements 12 and 14 are greater than the pivot so they are on the right side of the array.
 The relative ordering of the elements less than and greater than pivot is also maintained. [9, 5, 3] and [12, 14] are the respective orderings.
@@ -51,7 +51,7 @@ The relative ordering of the elements less than and greater than pivot is also m
 
 Input: nums = [-3,4,3,2], pivot = 2
 Output: [-3,2,4,3]
-Explanation:
+Explanation: 
 The element -3 is less than the pivot so it is on the left side of the array.
 The elements 4 and 3 are greater than the pivot so they are on the right side of the array.
 The relative ordering of the elements less than and greater than pivot is also maintained. [-3] and [4, 3] are the respective orderings.
diff --git a/solution/3100-3199/3171.Find Subarray With Bitwise AND Closest to K/README.md b/solution/3100-3199/3171.Find Subarray With Bitwise AND Closest to K/README.md
deleted file mode 100644
index bcfd33404a1ad..0000000000000
--- a/solution/3100-3199/3171.Find Subarray With Bitwise AND Closest to K/README.md	
+++ /dev/null
@@ -1,114 +0,0 @@
----
-comments: true
-difficulty: 困难
-edit_url: https://github.com/doocs/leetcode/edit/main/solution/3100-3199/3171.Find%20Subarray%20With%20Bitwise%20AND%20Closest%20to%20K/README.md
-tags:
-    - 位运算
-    - 线段树
-    - 数组
-    - 二分查找
----
-
-
-
-# [3171. 找到按位与最接近 K 的子数组](https://leetcode.cn/problems/find-subarray-with-bitwise-and-closest-to-k)
-
-[English Version](/solution/3100-3199/3171.Find%20Subarray%20With%20Bitwise%20AND%20Closest%20to%20K/README_EN.md)
-
-## 题目描述
-
-
-
-

给你一个数组 nums 和一个整数 k 。你需要找到 nums 的一个 子数组 ,满足子数组中所有元素按位与运算 AND 的值与 k 的 绝对差 尽可能  。换言之,你需要选择一个子数组 nums[l..r] 满足 |k - (nums[l] AND nums[l + 1] ... AND nums[r])| 最小。

- -

请你返回 最小 的绝对差值。

- -

子数组是数组中连续的 非空 元素序列。

- -

 

- -

示例 1:

- -
-

输入:nums = [1,2,4,5], k = 3

- -

输出:1

- -

解释:

- -

子数组 nums[2..3] 的按位 AND 运算值为 4 ,得到最小差值 |3 - 4| = 1 。

-
- -

示例 2:

- -
-

输入:nums = [1,2,1,2], k = 2

- -

输出:0

- -

解释:

- -

子数组 nums[1..1] 的按位 AND 运算值为 2 ,得到最小差值 |2 - 2| = 0 。

-
- -

示例 3:

- -
-

输入:nums = [1], k = 10

- -

输出:9

- -

解释:

- -

只有一个子数组,按位 AND 运算值为 1 ,得到最小差值 |10 - 1| = 9 。

-
- -

 

- -

提示:

- -
    -
  • 1 <= nums.length <= 105
  • -
  • 1 <= nums[i] <= 109
  • -
  • 1 <= k <= 109
  • -
- - - -## 解法 - - - -### 方法一 - - - -#### Python3 - -```python - -``` - -#### Java - -```java - -``` - -#### C++ - -```cpp - -``` - -#### Go - -```go - -``` - - - - - - diff --git a/solution/3100-3199/3171.Find Subarray With Bitwise AND Closest to K/README_EN.md b/solution/3100-3199/3171.Find Subarray With Bitwise AND Closest to K/README_EN.md deleted file mode 100644 index 7cf9661a2da64..0000000000000 --- a/solution/3100-3199/3171.Find Subarray With Bitwise AND Closest to K/README_EN.md +++ /dev/null @@ -1,112 +0,0 @@ ---- -comments: true -difficulty: Hard -edit_url: https://github.com/doocs/leetcode/edit/main/solution/3100-3199/3171.Find%20Subarray%20With%20Bitwise%20AND%20Closest%20to%20K/README_EN.md -tags: - - Bit Manipulation - - Segment Tree - - Array - - Binary Search ---- - - - -# [3171. Find Subarray With Bitwise AND Closest to K](https://leetcode.com/problems/find-subarray-with-bitwise-and-closest-to-k) - -[中文文档](/solution/3100-3199/3171.Find%20Subarray%20With%20Bitwise%20AND%20Closest%20to%20K/README.md) - -## Description - - - -

You are given an array nums and an integer k. You need to find a subarray of nums such that the absolute difference between k and the bitwise AND of the subarray elements is as small as possible. In other words, select a subarray nums[l..r] such that |k - (nums[l] AND nums[l + 1] ... AND nums[r])| is minimum.

- -

Return the minimum possible value of the absolute difference.

- -

A subarray is a contiguous non-empty sequence of elements within an array.

- -

 

-

Example 1:

- -
-

Input: nums = [1,2,4,5], k = 3

- -

Output: 1

- -

Explanation:

- -

The subarray nums[2..3] has AND value 4, which gives the minimum absolute difference |3 - 4| = 1.

-
- -

Example 2:

- -
-

Input: nums = [1,2,1,2], k = 2

- -

Output: 0

- -

Explanation:

- -

The subarray nums[1..1] has AND value 2, which gives the minimum absolute difference |2 - 2| = 0.

-
- -

Example 3:

- -
-

Input: nums = [1], k = 10

- -

Output: 9

- -

Explanation:

- -

There is a single subarray with AND value 1, which gives the minimum absolute difference |10 - 1| = 9.

-
- -

 

-

Constraints:

- -
    -
  • 1 <= nums.length <= 105
  • -
  • 1 <= nums[i] <= 109
  • -
  • 1 <= k <= 109
  • -
- - - -## Solutions - - - -### Solution 1 - - - -#### Python3 - -```python - -``` - -#### Java - -```java - -``` - -#### C++ - -```cpp - -``` - -#### Go - -```go - -``` - - - - - - diff --git a/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/README.md b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/README.md new file mode 100644 index 0000000000000..9de3232cc24a9 --- /dev/null +++ b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/README.md @@ -0,0 +1,349 @@ +--- +comments: true +difficulty: 困难 +edit_url: https://github.com/doocs/leetcode/edit/main/solution/3300-3399/3313.Find%20the%20Last%20Marked%20Nodes%20in%20Tree/README.md +tags: + - 树 + - 深度优先搜索 +--- + + + +# [3313. Find the Last Marked Nodes in Tree 🔒](https://leetcode.cn/problems/find-the-last-marked-nodes-in-tree) + +[English Version](/solution/3300-3399/3313.Find%20the%20Last%20Marked%20Nodes%20in%20Tree/README_EN.md) + +## 题目描述 + + + +

There exists an undirected tree with n nodes numbered 0 to n - 1. You are given a 2D integer array edges of length n - 1, where edges[i] = [ui, vi] indicates that there is an edge between nodes ui and vi in the tree.

+ +

Initially, all nodes are unmarked. After every second, you mark all unmarked nodes which have at least one marked node adjacent to them.

+ +

Return an array nodes where nodes[i] is the last node to get marked in the tree, if you mark node i at time t = 0. If nodes[i] has multiple answers for any node i, you can choose any one answer.

+ +

 

+

Example 1:

+ +
+

Input: edges = [[0,1],[0,2]]

+ +

Output: [2,2,1]

+ +

Explanation:

+ +

+ +
    +
  • For i = 0, the nodes are marked in the sequence: [0] -> [0,1,2]. Either 1 or 2 can be the answer.
  • +
  • For i = 1, the nodes are marked in the sequence: [1] -> [0,1] -> [0,1,2]. Node 2 is marked last.
  • +
  • For i = 2, the nodes are marked in the sequence: [2] -> [0,2] -> [0,1,2]. Node 1 is marked last.
  • +
+
+ +

Example 2:

+ +
+

Input: edges = [[0,1]]

+ +

Output: [1,0]

+ +

Explanation:

+ +

+ +
    +
  • For i = 0, the nodes are marked in the sequence: [0] -> [0,1].
  • +
  • For i = 1, the nodes are marked in the sequence: [1] -> [0,1].
  • +
+
+ +

Example 3:

+ +
+

Input: edges = [[0,1],[0,2],[2,3],[2,4]]

+ +

Output: [3,3,1,1,1]

+ +

Explanation:

+ +

+ +
    +
  • For i = 0, the nodes are marked in the sequence: [0] -> [0,1,2] -> [0,1,2,3,4].
  • +
  • For i = 1, the nodes are marked in the sequence: [1] -> [0,1] -> [0,1,2] -> [0,1,2,3,4].
  • +
  • For i = 2, the nodes are marked in the sequence: [2] -> [0,2,3,4] -> [0,1,2,3,4].
  • +
  • For i = 3, the nodes are marked in the sequence: [3] -> [2,3] -> [0,2,3,4] -> [0,1,2,3,4].
  • +
  • For i = 4, the nodes are marked in the sequence: [4] -> [2,4] -> [0,2,3,4] -> [0,1,2,3,4].
  • +
+
+ +

 

+

Constraints:

+ +
    +
  • 2 <= n <= 105
  • +
  • edges.length == n - 1
  • +
  • edges[i].length == 2
  • +
  • 0 <= edges[i][0], edges[i][1] <= n - 1
  • +
  • The input is generated such that edges represents a valid tree.
  • +
+ + + +## 解法 + + + +### 方法一:求树的直径 + DFS + +根据题目描述,最后一个被标记的节点一定是树的直径的一个端点,因为树的直径上的节点到直径上的任意一个节点的距离最大。 + +我们可以从任意一个节点开始进行深度优先搜索,找到距离最远的节点 $a$,这个节点就是树的直径的一个端点。 + +然后从节点 $a$ 开始进行深度优先搜索,找到距离最远的节点 $b$,这个节点就是树的直径的另一个端点,在这个过程中,我们计算出了每个节点到节点 $a$ 的距离,记为 $\textit{dist2}$。 + +接着从节点 $b$ 开始进行深度优先搜索,计算出每个节点到节点 $b$ 的距离,记为 $\textit{dist3}$。 + +那么,对于每一个节点 $i$,如果 $\textit{dist2}[i] > \textit{dist3}[i]$,那么节点 $a$ 到节点 $i$ 的距离更远,所以节点 $a$ 是最后一个被标记的节点;否则,节点 $b$ 是最后一个被标记的节点。 + +时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 是节点的数量。 + + + +#### Python3 + +```python +class Solution: + def lastMarkedNodes(self, edges: List[List[int]]) -> List[int]: + def dfs(i: int, fa: int, dist: List[int]): + for j in g[i]: + if j != fa: + dist[j] = dist[i] + 1 + dfs(j, i, dist) + + n = len(edges) + 1 + g = [[] for _ in range(n)] + for u, v in edges: + g[u].append(v) + g[v].append(u) + + dist1 = [-1] * n + dist1[0] = 0 + dfs(0, -1, dist1) + a = dist1.index(max(dist1)) + + dist2 = [-1] * n + dist2[a] = 0 + dfs(a, -1, dist2) + b = dist2.index(max(dist2)) + + dist3 = [-1] * n + dist3[b] = 0 + dfs(b, -1, dist3) + + return [a if x > y else b for x, y in zip(dist2, dist3)] +``` + +#### Java + +```java +class Solution { + private List[] g; + + public int[] lastMarkedNodes(int[][] edges) { + int n = edges.length + 1; + g = new List[n]; + Arrays.setAll(g, k -> new ArrayList<>()); + for (var e : edges) { + int u = e[0], v = e[1]; + g[u].add(v); + g[v].add(u); + } + int[] dist1 = new int[n]; + dist1[0] = 0; + dfs(0, -1, dist1); + int a = maxNode(dist1); + + int[] dist2 = new int[n]; + dist2[a] = 0; + dfs(a, -1, dist2); + int b = maxNode(dist2); + + int[] dist3 = new int[n]; + dist3[b] = 0; + dfs(b, -1, dist3); + + int[] ans = new int[n]; + for (int i = 0; i < n; ++i) { + ans[i] = dist2[i] > dist3[i] ? a : b; + } + return ans; + } + + private void dfs(int i, int fa, int[] dist) { + for (int j : g[i]) { + if (j != fa) { + dist[j] = dist[i] + 1; + dfs(j, i, dist); + } + } + } + + private int maxNode(int[] dist) { + int mx = 0; + for (int i = 0; i < dist.length; ++i) { + if (dist[mx] < dist[i]) { + mx = i; + } + } + return mx; + } +} +``` + +#### C++ + +```cpp +class Solution { +public: + vector lastMarkedNodes(vector>& edges) { + int n = edges.size() + 1; + g.resize(n); + for (const auto& e : edges) { + int u = e[0], v = e[1]; + g[u].push_back(v); + g[v].push_back(u); + } + auto max_node = [&](const vector& dist) { + int mx = ranges::max(dist); + return ranges::find(dist, mx) - dist.begin(); + }; + vector dist1(n); + dfs(0, -1, dist1); + int a = max_node(dist1); + + vector dist2(n); + dfs(a, -1, dist2); + int b = max_node(dist2); + + vector dist3(n); + dfs(b, -1, dist3); + + vector ans; + for (int i = 0; i < n; ++i) { + ans.push_back(dist2[i] > dist3[i] ? a : b); + } + return ans; + } + +private: + vector> g; + + void dfs(int i, int fa, vector& dist) { + for (int j : g[i]) { + if (j != fa) { + dist[j] = dist[i] + 1; + dfs(j, i, dist); + } + } + } +}; +``` + +#### Go + +```go +func lastMarkedNodes(edges [][]int) (ans []int) { + n := len(edges) + 1 + g := make([][]int, n) + for _, e := range edges { + u, v := e[0], e[1] + g[u] = append(g[u], v) + g[v] = append(g[v], u) + } + var dfs func(int, int, []int) + dfs = func(i, fa int, dist []int) { + for _, j := range g[i] { + if j != fa { + dist[j] = dist[i] + 1 + dfs(j, i, dist) + } + } + } + maxNode := func(dist []int) int { + mx := 0 + for i, d := range dist { + if dist[mx] < d { + mx = i + } + } + return mx + } + + dist1 := make([]int, n) + dfs(0, -1, dist1) + a := maxNode(dist1) + + dist2 := make([]int, n) + dfs(a, -1, dist2) + b := maxNode(dist2) + + dist3 := make([]int, n) + dfs(b, -1, dist3) + + for i, x := range dist2 { + if x > dist3[i] { + ans = append(ans, a) + } else { + ans = append(ans, b) + } + } + return +} +``` + +#### TypeScript + +```ts +function lastMarkedNodes(edges: number[][]): number[] { + const n = edges.length + 1; + const g: number[][] = Array.from({ length: n }, () => []); + for (const [u, v] of edges) { + g[u].push(v); + g[v].push(u); + } + const dfs = (i: number, fa: number, dist: number[]) => { + for (const j of g[i]) { + if (j !== fa) { + dist[j] = dist[i] + 1; + dfs(j, i, dist); + } + } + }; + + const dist1: number[] = Array(n).fill(0); + dfs(0, -1, dist1); + const a = dist1.indexOf(Math.max(...dist1)); + + const dist2: number[] = Array(n).fill(0); + dfs(a, -1, dist2); + const b = dist2.indexOf(Math.max(...dist2)); + + const dist3: number[] = Array(n).fill(0); + dfs(b, -1, dist3); + + const ans: number[] = []; + for (let i = 0; i < n; ++i) { + ans.push(dist2[i] > dist3[i] ? a : b); + } + return ans; +} +``` + + + + + + diff --git a/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/README_EN.md b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/README_EN.md new file mode 100644 index 0000000000000..501e35597eb6b --- /dev/null +++ b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/README_EN.md @@ -0,0 +1,349 @@ +--- +comments: true +difficulty: Hard +edit_url: https://github.com/doocs/leetcode/edit/main/solution/3300-3399/3313.Find%20the%20Last%20Marked%20Nodes%20in%20Tree/README_EN.md +tags: + - Tree + - Depth-First Search +--- + + + +# [3313. Find the Last Marked Nodes in Tree 🔒](https://leetcode.com/problems/find-the-last-marked-nodes-in-tree) + +[中文文档](/solution/3300-3399/3313.Find%20the%20Last%20Marked%20Nodes%20in%20Tree/README.md) + +## Description + + + +

There exists an undirected tree with n nodes numbered 0 to n - 1. You are given a 2D integer array edges of length n - 1, where edges[i] = [ui, vi] indicates that there is an edge between nodes ui and vi in the tree.

+ +

Initially, all nodes are unmarked. After every second, you mark all unmarked nodes which have at least one marked node adjacent to them.

+ +

Return an array nodes where nodes[i] is the last node to get marked in the tree, if you mark node i at time t = 0. If nodes[i] has multiple answers for any node i, you can choose any one answer.

+ +

 

+

Example 1:

+ +
+

Input: edges = [[0,1],[0,2]]

+ +

Output: [2,2,1]

+ +

Explanation:

+ +

+ +
    +
  • For i = 0, the nodes are marked in the sequence: [0] -> [0,1,2]. Either 1 or 2 can be the answer.
  • +
  • For i = 1, the nodes are marked in the sequence: [1] -> [0,1] -> [0,1,2]. Node 2 is marked last.
  • +
  • For i = 2, the nodes are marked in the sequence: [2] -> [0,2] -> [0,1,2]. Node 1 is marked last.
  • +
+
+ +

Example 2:

+ +
+

Input: edges = [[0,1]]

+ +

Output: [1,0]

+ +

Explanation:

+ +

+ +
    +
  • For i = 0, the nodes are marked in the sequence: [0] -> [0,1].
  • +
  • For i = 1, the nodes are marked in the sequence: [1] -> [0,1].
  • +
+
+ +

Example 3:

+ +
+

Input: edges = [[0,1],[0,2],[2,3],[2,4]]

+ +

Output: [3,3,1,1,1]

+ +

Explanation:

+ +

+ +
    +
  • For i = 0, the nodes are marked in the sequence: [0] -> [0,1,2] -> [0,1,2,3,4].
  • +
  • For i = 1, the nodes are marked in the sequence: [1] -> [0,1] -> [0,1,2] -> [0,1,2,3,4].
  • +
  • For i = 2, the nodes are marked in the sequence: [2] -> [0,2,3,4] -> [0,1,2,3,4].
  • +
  • For i = 3, the nodes are marked in the sequence: [3] -> [2,3] -> [0,2,3,4] -> [0,1,2,3,4].
  • +
  • For i = 4, the nodes are marked in the sequence: [4] -> [2,4] -> [0,2,3,4] -> [0,1,2,3,4].
  • +
+
+ +

 

+

Constraints:

+ +
    +
  • 2 <= n <= 105
  • +
  • edges.length == n - 1
  • +
  • edges[i].length == 2
  • +
  • 0 <= edges[i][0], edges[i][1] <= n - 1
  • +
  • The input is generated such that edges represents a valid tree.
  • +
+ + + +## Solutions + + + +### Solution 1: Find the Diameter of the Tree + DFS + +According to the problem description, the last marked node must be one endpoint of the tree's diameter, because the distance from any node on the diameter to any other node on the diameter is the greatest. + +We can start a depth-first search (DFS) from any node to find the farthest node $a$, which is one endpoint of the tree's diameter. + +Then, starting from node $a$, we perform another depth-first search to find the farthest node $b$, which is the other endpoint of the tree's diameter. During this process, we calculate the distance from each node to node $a$, denoted as $\textit{dist2}$. + +Next, we perform a depth-first search starting from node $b$ to calculate the distance from each node to node $b$, denoted as $\textit{dist3}$. + +For each node $i$, if $\textit{dist2}[i] > $\textit{dist3}[i]$, then the distance from node $a$ to node $i$ is greater, so node $a$ is the last marked node; otherwise, node $b$ is the last marked node. + +The time complexity is $O(n)$, and the space complexity is $O(n)$. Here, $n$ is the number of nodes. + + + +#### Python3 + +```python +class Solution: + def lastMarkedNodes(self, edges: List[List[int]]) -> List[int]: + def dfs(i: int, fa: int, dist: List[int]): + for j in g[i]: + if j != fa: + dist[j] = dist[i] + 1 + dfs(j, i, dist) + + n = len(edges) + 1 + g = [[] for _ in range(n)] + for u, v in edges: + g[u].append(v) + g[v].append(u) + + dist1 = [-1] * n + dist1[0] = 0 + dfs(0, -1, dist1) + a = dist1.index(max(dist1)) + + dist2 = [-1] * n + dist2[a] = 0 + dfs(a, -1, dist2) + b = dist2.index(max(dist2)) + + dist3 = [-1] * n + dist3[b] = 0 + dfs(b, -1, dist3) + + return [a if x > y else b for x, y in zip(dist2, dist3)] +``` + +#### Java + +```java +class Solution { + private List[] g; + + public int[] lastMarkedNodes(int[][] edges) { + int n = edges.length + 1; + g = new List[n]; + Arrays.setAll(g, k -> new ArrayList<>()); + for (var e : edges) { + int u = e[0], v = e[1]; + g[u].add(v); + g[v].add(u); + } + int[] dist1 = new int[n]; + dist1[0] = 0; + dfs(0, -1, dist1); + int a = maxNode(dist1); + + int[] dist2 = new int[n]; + dist2[a] = 0; + dfs(a, -1, dist2); + int b = maxNode(dist2); + + int[] dist3 = new int[n]; + dist3[b] = 0; + dfs(b, -1, dist3); + + int[] ans = new int[n]; + for (int i = 0; i < n; ++i) { + ans[i] = dist2[i] > dist3[i] ? a : b; + } + return ans; + } + + private void dfs(int i, int fa, int[] dist) { + for (int j : g[i]) { + if (j != fa) { + dist[j] = dist[i] + 1; + dfs(j, i, dist); + } + } + } + + private int maxNode(int[] dist) { + int mx = 0; + for (int i = 0; i < dist.length; ++i) { + if (dist[mx] < dist[i]) { + mx = i; + } + } + return mx; + } +} +``` + +#### C++ + +```cpp +class Solution { +public: + vector lastMarkedNodes(vector>& edges) { + int n = edges.size() + 1; + g.resize(n); + for (const auto& e : edges) { + int u = e[0], v = e[1]; + g[u].push_back(v); + g[v].push_back(u); + } + auto max_node = [&](const vector& dist) { + int mx = ranges::max(dist); + return ranges::find(dist, mx) - dist.begin(); + }; + vector dist1(n); + dfs(0, -1, dist1); + int a = max_node(dist1); + + vector dist2(n); + dfs(a, -1, dist2); + int b = max_node(dist2); + + vector dist3(n); + dfs(b, -1, dist3); + + vector ans; + for (int i = 0; i < n; ++i) { + ans.push_back(dist2[i] > dist3[i] ? a : b); + } + return ans; + } + +private: + vector> g; + + void dfs(int i, int fa, vector& dist) { + for (int j : g[i]) { + if (j != fa) { + dist[j] = dist[i] + 1; + dfs(j, i, dist); + } + } + } +}; +``` + +#### Go + +```go +func lastMarkedNodes(edges [][]int) (ans []int) { + n := len(edges) + 1 + g := make([][]int, n) + for _, e := range edges { + u, v := e[0], e[1] + g[u] = append(g[u], v) + g[v] = append(g[v], u) + } + var dfs func(int, int, []int) + dfs = func(i, fa int, dist []int) { + for _, j := range g[i] { + if j != fa { + dist[j] = dist[i] + 1 + dfs(j, i, dist) + } + } + } + maxNode := func(dist []int) int { + mx := 0 + for i, d := range dist { + if dist[mx] < d { + mx = i + } + } + return mx + } + + dist1 := make([]int, n) + dfs(0, -1, dist1) + a := maxNode(dist1) + + dist2 := make([]int, n) + dfs(a, -1, dist2) + b := maxNode(dist2) + + dist3 := make([]int, n) + dfs(b, -1, dist3) + + for i, x := range dist2 { + if x > dist3[i] { + ans = append(ans, a) + } else { + ans = append(ans, b) + } + } + return +} +``` + +#### TypeScript + +```ts +function lastMarkedNodes(edges: number[][]): number[] { + const n = edges.length + 1; + const g: number[][] = Array.from({ length: n }, () => []); + for (const [u, v] of edges) { + g[u].push(v); + g[v].push(u); + } + const dfs = (i: number, fa: number, dist: number[]) => { + for (const j of g[i]) { + if (j !== fa) { + dist[j] = dist[i] + 1; + dfs(j, i, dist); + } + } + }; + + const dist1: number[] = Array(n).fill(0); + dfs(0, -1, dist1); + const a = dist1.indexOf(Math.max(...dist1)); + + const dist2: number[] = Array(n).fill(0); + dfs(a, -1, dist2); + const b = dist2.indexOf(Math.max(...dist2)); + + const dist3: number[] = Array(n).fill(0); + dfs(b, -1, dist3); + + const ans: number[] = []; + for (let i = 0; i < n; ++i) { + ans.push(dist2[i] > dist3[i] ? a : b); + } + return ans; +} +``` + + + + + + diff --git a/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.cpp b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.cpp new file mode 100644 index 0000000000000..e379295e8c4a9 --- /dev/null +++ b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.cpp @@ -0,0 +1,44 @@ +class Solution { +public: + vector lastMarkedNodes(vector>& edges) { + int n = edges.size() + 1; + g.resize(n); + for (const auto& e : edges) { + int u = e[0], v = e[1]; + g[u].push_back(v); + g[v].push_back(u); + } + auto max_node = [&](const vector& dist) { + int mx = ranges::max(dist); + return ranges::find(dist, mx) - dist.begin(); + }; + vector dist1(n); + dfs(0, -1, dist1); + int a = max_node(dist1); + + vector dist2(n); + dfs(a, -1, dist2); + int b = max_node(dist2); + + vector dist3(n); + dfs(b, -1, dist3); + + vector ans; + for (int i = 0; i < n; ++i) { + ans.push_back(dist2[i] > dist3[i] ? a : b); + } + return ans; + } + +private: + vector> g; + + void dfs(int i, int fa, vector& dist) { + for (int j : g[i]) { + if (j != fa) { + dist[j] = dist[i] + 1; + dfs(j, i, dist); + } + } + } +}; diff --git a/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.go b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.go new file mode 100644 index 0000000000000..c2153369c0d64 --- /dev/null +++ b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.go @@ -0,0 +1,47 @@ +func lastMarkedNodes(edges [][]int) (ans []int) { + n := len(edges) + 1 + g := make([][]int, n) + for _, e := range edges { + u, v := e[0], e[1] + g[u] = append(g[u], v) + g[v] = append(g[v], u) + } + var dfs func(int, int, []int) + dfs = func(i, fa int, dist []int) { + for _, j := range g[i] { + if j != fa { + dist[j] = dist[i] + 1 + dfs(j, i, dist) + } + } + } + maxNode := func(dist []int) int { + mx := 0 + for i, d := range dist { + if dist[mx] < d { + mx = i + } + } + return mx + } + + dist1 := make([]int, n) + dfs(0, -1, dist1) + a := maxNode(dist1) + + dist2 := make([]int, n) + dfs(a, -1, dist2) + b := maxNode(dist2) + + dist3 := make([]int, n) + dfs(b, -1, dist3) + + for i, x := range dist2 { + if x > dist3[i] { + ans = append(ans, a) + } else { + ans = append(ans, b) + } + } + return +} diff --git a/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.java b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.java new file mode 100644 index 0000000000000..60c84ce57275e --- /dev/null +++ b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.java @@ -0,0 +1,52 @@ +class Solution { + private List[] g; + + public int[] lastMarkedNodes(int[][] edges) { + int n = edges.length + 1; + g = new List[n]; + Arrays.setAll(g, k -> new ArrayList<>()); + for (var e : edges) { + int u = e[0], v = e[1]; + g[u].add(v); + g[v].add(u); + } + int[] dist1 = new int[n]; + dist1[0] = 0; + dfs(0, -1, dist1); + int a = maxNode(dist1); + + int[] dist2 = new int[n]; + dist2[a] = 0; + dfs(a, -1, dist2); + int b = maxNode(dist2); + + int[] dist3 = new int[n]; + dist3[b] = 0; + dfs(b, -1, dist3); + + int[] ans = new int[n]; + for (int i = 0; i < n; ++i) { + ans[i] = dist2[i] > dist3[i] ? a : b; + } + return ans; + } + + private void dfs(int i, int fa, int[] dist) { + for (int j : g[i]) { + if (j != fa) { + dist[j] = dist[i] + 1; + dfs(j, i, dist); + } + } + } + + private int maxNode(int[] dist) { + int mx = 0; + for (int i = 0; i < dist.length; ++i) { + if (dist[mx] < dist[i]) { + mx = i; + } + } + return mx; + } +} diff --git a/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.py b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.py new file mode 100644 index 0000000000000..6198d554f6b96 --- /dev/null +++ b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.py @@ -0,0 +1,29 @@ +class Solution: + def lastMarkedNodes(self, edges: List[List[int]]) -> List[int]: + def dfs(i: int, fa: int, dist: List[int]): + for j in g[i]: + if j != fa: + dist[j] = dist[i] + 1 + dfs(j, i, dist) + + n = len(edges) + 1 + g = [[] for _ in range(n)] + for u, v in edges: + g[u].append(v) + g[v].append(u) + + dist1 = [-1] * n + dist1[0] = 0 + dfs(0, -1, dist1) + a = dist1.index(max(dist1)) + + dist2 = [-1] * n + dist2[a] = 0 + dfs(a, -1, dist2) + b = dist2.index(max(dist2)) + + dist3 = [-1] * n + dist3[b] = 0 + dfs(b, -1, dist3) + + return [a if x > y else b for x, y in zip(dist2, dist3)] diff --git a/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.ts b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.ts new file mode 100644 index 0000000000000..3484a7665c120 --- /dev/null +++ b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/Solution.ts @@ -0,0 +1,33 @@ +function lastMarkedNodes(edges: number[][]): number[] { + const n = edges.length + 1; + const g: number[][] = Array.from({ length: n }, () => []); + for (const [u, v] of edges) { + g[u].push(v); + g[v].push(u); + } + const dfs = (i: number, fa: number, dist: number[]) => { + for (const j of g[i]) { + if (j !== fa) { + dist[j] = dist[i] + 1; + dfs(j, i, dist); + } + } + }; + + const dist1: number[] = Array(n).fill(0); + dfs(0, -1, dist1); + const a = dist1.indexOf(Math.max(...dist1)); + + const dist2: number[] = Array(n).fill(0); + dfs(a, -1, dist2); + const b = dist2.indexOf(Math.max(...dist2)); + + const dist3: number[] = Array(n).fill(0); + dfs(b, -1, dist3); + + const ans: number[] = []; + for (let i = 0; i < n; ++i) { + ans.push(dist2[i] > dist3[i] ? a : b); + } + return ans; +} diff --git a/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/images/screenshot-2024-06-02-122236.png b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/images/screenshot-2024-06-02-122236.png new file mode 100644 index 0000000000000000000000000000000000000000..946a246ec3f7e5e3426328207551ec097d5b01f6 GIT binary patch literal 9118 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 literal 0 HcmV?d00001 diff --git a/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/images/screenshot-2024-06-02-122249.png b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/images/screenshot-2024-06-02-122249.png new file mode 100644 index 0000000000000000000000000000000000000000..433e6062d62326626c97b3c1e2ab8137e8b715bd GIT binary patch literal 5935 zcmd^D`9GB1-@k@ZQ6~*TYsr2m>uXh3xe<3opmnn+A#%bLqExv$>Eo6Uq55=@RemOI^Q^6C+f>I@NT)uvB+csn(E)wndAyo_ZF`;S}v;M+1g^M_Ct*d*WHDJCwCh zx)lYJ3Df++6zU zuq}MjJ{fH#(OqyK@qob+x1lvnngv%bxVYOaanaJouEMb|QA!8mxo=unrZ)-y?$$S+ zO={V&L19-U%q!Bu?*zW70R=}pGQ3H>*76Y$t2MuCIZ^Y4D@(y~b(=qv zOx267m8e!v#$xVn{%WViu*aPyw%4oE$=29B0O$$py^vzS9pHxXX34l(@}rq4WKPp)`%^S1B=zK1>_0 z4g0$@c$5-vARMu6nQ}baAHF+7e_B}RU9jGnB8y_Eo9y<_BwBFnYL;el%vT9w#^(3? zST!dcD|+?}vyZqPUbD(LLt9@ORW`+!#%^mEOzdv6G)#cZr~g7qGVD*DxwGhuCla+} zd4JlKS)Ku{PbA0ZI))n8E17kZTS1&Pa-1=zZia9bt{tP%%0Abkpi$%B-;8;}9Xiw7*_DJfXhN9LKO4n5;M+ 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 GzW=|bQ0^Q6 literal 0 HcmV?d00001 diff --git a/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/images/screenshot-2024-06-03-210550.png b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/images/screenshot-2024-06-03-210550.png new file mode 100644 index 0000000000000000000000000000000000000000..17d75ffcde428b279027758fef55fe3e8f0b6066 GIT binary patch literal 15011 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

-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 R4$uMgNKREY|AF~`{}1zuu{{6) literal 0 HcmV?d00001 diff --git a/solution/README.md b/solution/README.md index ad2fc7bfc15e0..56eec3a709d7f 100644 --- a/solution/README.md +++ b/solution/README.md @@ -3323,6 +3323,7 @@ | 3310 | [移除可疑的方法](/solution/3300-3399/3310.Remove%20Methods%20From%20Project/README.md) | `深度优先搜索`,`广度优先搜索`,`图` | 中等 | 第 418 场周赛 | | 3311 | [构造符合图结构的二维矩阵](/solution/3300-3399/3311.Construct%202D%20Grid%20Matching%20Graph%20Layout/README.md) | `图`,`数组`,`哈希表`,`矩阵` | 困难 | 第 418 场周赛 | | 3312 | [查询排序后的最大公约数](/solution/3300-3399/3312.Sorted%20GCD%20Pair%20Queries/README.md) | `数组`,`哈希表`,`数学`,`二分查找`,`组合数学`,`计数`,`数论`,`前缀和` | 困难 | 第 418 场周赛 | +| 3313 | [Find the Last Marked Nodes in Tree](/solution/3300-3399/3313.Find%20the%20Last%20Marked%20Nodes%20in%20Tree/README.md) | `树`,`深度优先搜索` | 困难 | 🔒 | ## 版权 diff --git a/solution/README_EN.md b/solution/README_EN.md index d3ce6540e7554..3aa429e26ced6 100644 --- a/solution/README_EN.md +++ b/solution/README_EN.md @@ -3321,6 +3321,7 @@ Press Control + F(or Command + F on | 3310 | [Remove Methods From Project](/solution/3300-3399/3310.Remove%20Methods%20From%20Project/README_EN.md) | `Depth-First Search`,`Breadth-First Search`,`Graph` | Medium | Weekly Contest 418 | | 3311 | [Construct 2D Grid Matching Graph Layout](/solution/3300-3399/3311.Construct%202D%20Grid%20Matching%20Graph%20Layout/README_EN.md) | `Graph`,`Array`,`Hash Table`,`Matrix` | Hard | Weekly Contest 418 | | 3312 | [Sorted GCD Pair Queries](/solution/3300-3399/3312.Sorted%20GCD%20Pair%20Queries/README_EN.md) | `Array`,`Hash Table`,`Math`,`Binary Search`,`Combinatorics`,`Counting`,`Number Theory`,`Prefix Sum` | Hard | Weekly Contest 418 | +| 3313 | [Find the Last Marked Nodes in Tree](/solution/3300-3399/3313.Find%20the%20Last%20Marked%20Nodes%20in%20Tree/README_EN.md) | `Tree`,`Depth-First Search` | Hard | 🔒 | ## Copyright From 11f5d433645c2ca0133b6c6d0813e56f1fa5c173 Mon Sep 17 00:00:00 2001 From: Doocs Bot Date: Wed, 9 Oct 2024 09:33:35 +0800 Subject: [PATCH 2/2] Optimised images with calibre/image-actions --- .../images/screenshot-2024-06-02-122236.png | Bin 9118 -> 7192 bytes .../images/screenshot-2024-06-02-122249.png | Bin 5935 -> 4721 bytes .../images/screenshot-2024-06-03-210550.png | Bin 15011 -> 11542 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/images/screenshot-2024-06-02-122236.png b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/images/screenshot-2024-06-02-122236.png index 946a246ec3f7e5e3426328207551ec097d5b01f6..99c2faa939bd26319a5f0d064d25e21ab5c1e79a 100644 GIT binary patch literal 7192 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 literal 9118 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 diff --git a/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/images/screenshot-2024-06-02-122249.png b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/images/screenshot-2024-06-02-122249.png index 433e6062d62326626c97b3c1e2ab8137e8b715bd..a1c69f9e571f68578931fc2d20a373c85a905bb5 100644 GIT binary patch literal 4721 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 L{b-HTx0nA5dlzOu literal 5935 zcmd^D`9GB1-@k@ZQ6~*TYsr2m>uXh3xe<3opmnn+A#%bLqExv$>Eo6Uq55=@RemOI^Q^6C+f>I@NT)uvB+csn(E)wndAyo_ZF`;S}v;M+1g^M_Ct*d*WHDJCwCh zx)lYJ3Df++6zU zuq}MjJ{fH#(OqyK@qob+x1lvnngv%bxVYOaanaJouEMb|QA!8mxo=unrZ)-y?$$S+ zO={V&L19-U%q!Bu?*zW70R=}pGQ3H>*76Y$t2MuCIZ^Y4D@(y~b(=qv zOx267m8e!v#$xVn{%WViu*aPyw%4oE$=29B0O$$py^vzS9pHxXX34l(@}rq4WKPp)`%^S1B=zK1>_0 z4g0$@c$5-vARMu6nQ}baAHF+7e_B}RU9jGnB8y_Eo9y<_BwBFnYL;el%vT9w#^(3? zST!dcD|+?}vyZqPUbD(LLt9@ORW`+!#%^mEOzdv6G)#cZr~g7qGVD*DxwGhuCla+} zd4JlKS)Ku{PbA0ZI))n8E17kZTS1&Pa-1=zZia9bt{tP%%0Abkpi$%B-;8;}9Xiw7*_DJfXhN9LKO4n5;M+ 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 GzW=|bQ0^Q6 diff --git a/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/images/screenshot-2024-06-03-210550.png b/solution/3300-3399/3313.Find the Last Marked Nodes in Tree/images/screenshot-2024-06-03-210550.png index 17d75ffcde428b279027758fef55fe3e8f0b6066..b90c139b48f8852e778f0896d1e500f808dcd4fe 100644 GIT binary patch literal 11542 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 F{}&7oo?rj~ literal 15011 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

-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 R4$uMgNKREY|AF~`{}1zuu{{6)