Skip to content

Commit ba24768

Browse files
committed
May 28
1 parent a8ff7fd commit ba24768

File tree

2 files changed

+56
-2
lines changed

2 files changed

+56
-2
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
from collections import deque
2+
3+
4+
class Solution:
5+
def __build_adj_list(self, edges: list[list[int]]) -> list[list[int]]:
6+
n = len(edges) + 1
7+
graph = [[] for _ in range(n)]
8+
for u, v in edges:
9+
graph[u].append(v)
10+
graph[v].append(u)
11+
return graph
12+
13+
def __bfs(self, graph: list[list[int]], start: int, k: int) -> int:
14+
level = 0
15+
queue = deque([start])
16+
visited = {start}
17+
count = 1 # node is always target to itself
18+
while queue and level < k:
19+
for _ in range(len(queue)):
20+
node = queue.popleft()
21+
for neighbour in graph[node]:
22+
if neighbour not in visited:
23+
count += 1
24+
visited.add(neighbour)
25+
queue.append(neighbour)
26+
level += 1
27+
return count
28+
29+
def maxTargetNodes(
30+
self, edges1: list[list[int]], edges2: list[list[int]], k: int
31+
) -> list[int]:
32+
graph1, graph2 = map(self.__build_adj_list, (edges1, edges2))
33+
n_targets1 = [self.__bfs(graph1, node, k) for node in range(len(graph1))]
34+
max_targets2 = 0
35+
if k > 0:
36+
for node in range(len(graph2)):
37+
max_targets2 = max(max_targets2, self.__bfs(graph2, node, k - 1))
38+
return [n_targets + max_targets2 for n_targets in n_targets1]
39+
40+
41+
def main():
42+
edges1 = [[0, 1], [0, 2], [2, 3], [2, 4]]
43+
edges2 = [[0, 1], [0, 2], [0, 3], [2, 7], [1, 4], [4, 5], [4, 6]]
44+
k = 2
45+
assert Solution().maxTargetNodes(edges1, edges2, k) == [9, 7, 9, 8, 8]
46+
47+
edges1 = [[0, 1], [0, 2], [0, 3], [0, 4]]
48+
edges2 = [[0, 1], [1, 2], [2, 3]]
49+
k = 1
50+
assert Solution().maxTargetNodes(edges1, edges2, k) == [6, 3, 3, 3, 3]
51+
52+
53+
if __name__ == '__main__':
54+
main()

2025-05-May-LeetCoding-Challenge/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
| May 25 | [2131. Longest Palindrome by Concatenating Two Letter Words](https://leetcode.com/problems/longest-palindrome-by-concatenating-two-letter-words/) | Medium | Solved |
3232
| May 26 | [1857. Largest Color Value in a Directed Graph](https://leetcode.com/problems/largest-color-value-in-a-directed-graph/) | Hard | Unsolved |
3333
| May 27 | [2894. Divisible and Non-divisible Sums Difference](https://leetcode.com/problems/divisible-and-non-divisible-sums-difference/) | Easy | Solved |
34-
| May 28 | []() | | |
34+
| May 28 | [3372. Maximize the Number of Target Nodes After Connecting Trees I](https://leetcode.com/problems/maximize-the-number-of-target-nodes-after-connecting-trees-i/) | Medium | Solved |
3535
| May 29 | []() | | |
3636
| May 30 | [2359. Find Closest Node to Given Two Nodes](https://leetcode.com/problems/find-closest-node-to-given-two-nodes/) | Medium | Solved |
3737
| May 31 | []() | | |
@@ -41,5 +41,5 @@
4141
| Level | Problems | Solved | Unsolved |
4242
| --- | --- | --- | --- |
4343
| Easy | 7 | 7 | 0 |
44-
| Medium | 14 | 11 | 3 |
44+
| Medium | 15 | 12 | 3 |
4545
| Hard | 6 | 1 | 5 |

0 commit comments

Comments
 (0)