Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit a2d4d2f

Browse files
authored
feat: add solutions to lc problems: No.3372,3373 (doocs#3830)
1 parent 548dd9d commit a2d4d2f

File tree

12 files changed

+904
-18
lines changed

12 files changed

+904
-18
lines changed

solution/3300-3399/3372.Maximize the Number of Target Nodes After Connecting Trees I/README.md

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,11 @@ class Solution:
9595
) -> List[int]:
9696
def build(edges: List[List[int]]) -> List[List[int]]:
9797
n = len(edges) + 1
98-
tree = [[] for _ in range(n)]
98+
g = [[] for _ in range(n)]
9999
for a, b in edges:
100-
tree[a].append(b)
101-
tree[b].append(a)
102-
return tree
100+
g[a].append(b)
101+
g[b].append(a)
102+
return g
103103

104104
def dfs(g: List[List[int]], a: int, fa: int, d: int) -> int:
105105
if d < 0:
@@ -308,6 +308,60 @@ function dfs(g: number[][], a: number, fa: number, d: number): number {
308308
}
309309
```
310310

311+
#### C#
312+
313+
```cs
314+
public class Solution {
315+
public int[] MaxTargetNodes(int[][] edges1, int[][] edges2, int k) {
316+
var g2 = Build(edges2);
317+
int m = edges2.Length + 1;
318+
int t = 0;
319+
320+
for (int i = 0; i < m; i++) {
321+
t = Math.Max(t, Dfs(g2, i, -1, k - 1));
322+
}
323+
324+
var g1 = Build(edges1);
325+
int n = edges1.Length + 1;
326+
var ans = new int[n];
327+
Array.Fill(ans, t);
328+
329+
for (int i = 0; i < n; i++) {
330+
ans[i] += Dfs(g1, i, -1, k);
331+
}
332+
333+
return ans;
334+
}
335+
336+
private List<int>[] Build(int[][] edges) {
337+
int n = edges.Length + 1;
338+
var g = new List<int>[n];
339+
for (int i = 0; i < n; i++) {
340+
g[i] = new List<int>();
341+
}
342+
foreach (var e in edges) {
343+
int a = e[0], b = e[1];
344+
g[a].Add(b);
345+
g[b].Add(a);
346+
}
347+
return g;
348+
}
349+
350+
private int Dfs(List<int>[] g, int a, int fa, int d) {
351+
if (d < 0) {
352+
return 0;
353+
}
354+
int cnt = 1;
355+
foreach (var b in g[a]) {
356+
if (b != fa) {
357+
cnt += Dfs(g, b, a, d - 1);
358+
}
359+
}
360+
return cnt;
361+
}
362+
}
363+
```
364+
311365
<!-- tabs:end -->
312366

313367
<!-- solution:end -->

solution/3300-3399/3372.Maximize the Number of Target Nodes After Connecting Trees I/README_EN.md

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,11 @@ class Solution:
9090
) -> List[int]:
9191
def build(edges: List[List[int]]) -> List[List[int]]:
9292
n = len(edges) + 1
93-
tree = [[] for _ in range(n)]
93+
g = [[] for _ in range(n)]
9494
for a, b in edges:
95-
tree[a].append(b)
96-
tree[b].append(a)
97-
return tree
95+
g[a].append(b)
96+
g[b].append(a)
97+
return g
9898

9999
def dfs(g: List[List[int]], a: int, fa: int, d: int) -> int:
100100
if d < 0:
@@ -303,6 +303,60 @@ function dfs(g: number[][], a: number, fa: number, d: number): number {
303303
}
304304
```
305305

306+
#### C#
307+
308+
```cs
309+
public class Solution {
310+
public int[] MaxTargetNodes(int[][] edges1, int[][] edges2, int k) {
311+
var g2 = Build(edges2);
312+
int m = edges2.Length + 1;
313+
int t = 0;
314+
315+
for (int i = 0; i < m; i++) {
316+
t = Math.Max(t, Dfs(g2, i, -1, k - 1));
317+
}
318+
319+
var g1 = Build(edges1);
320+
int n = edges1.Length + 1;
321+
var ans = new int[n];
322+
Array.Fill(ans, t);
323+
324+
for (int i = 0; i < n; i++) {
325+
ans[i] += Dfs(g1, i, -1, k);
326+
}
327+
328+
return ans;
329+
}
330+
331+
private List<int>[] Build(int[][] edges) {
332+
int n = edges.Length + 1;
333+
var g = new List<int>[n];
334+
for (int i = 0; i < n; i++) {
335+
g[i] = new List<int>();
336+
}
337+
foreach (var e in edges) {
338+
int a = e[0], b = e[1];
339+
g[a].Add(b);
340+
g[b].Add(a);
341+
}
342+
return g;
343+
}
344+
345+
private int Dfs(List<int>[] g, int a, int fa, int d) {
346+
if (d < 0) {
347+
return 0;
348+
}
349+
int cnt = 1;
350+
foreach (var b in g[a]) {
351+
if (b != fa) {
352+
cnt += Dfs(g, b, a, d - 1);
353+
}
354+
}
355+
return cnt;
356+
}
357+
}
358+
```
359+
306360
<!-- tabs:end -->
307361

308362
<!-- solution:end -->
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
public class Solution {
2+
public int[] MaxTargetNodes(int[][] edges1, int[][] edges2, int k) {
3+
var g2 = Build(edges2);
4+
int m = edges2.Length + 1;
5+
int t = 0;
6+
7+
for (int i = 0; i < m; i++) {
8+
t = Math.Max(t, Dfs(g2, i, -1, k - 1));
9+
}
10+
11+
var g1 = Build(edges1);
12+
int n = edges1.Length + 1;
13+
var ans = new int[n];
14+
Array.Fill(ans, t);
15+
16+
for (int i = 0; i < n; i++) {
17+
ans[i] += Dfs(g1, i, -1, k);
18+
}
19+
20+
return ans;
21+
}
22+
23+
private List<int>[] Build(int[][] edges) {
24+
int n = edges.Length + 1;
25+
var g = new List<int>[n];
26+
for (int i = 0; i < n; i++) {
27+
g[i] = new List<int>();
28+
}
29+
foreach (var e in edges) {
30+
int a = e[0], b = e[1];
31+
g[a].Add(b);
32+
g[b].Add(a);
33+
}
34+
return g;
35+
}
36+
37+
private int Dfs(List<int>[] g, int a, int fa, int d) {
38+
if (d < 0) {
39+
return 0;
40+
}
41+
int cnt = 1;
42+
foreach (var b in g[a]) {
43+
if (b != fa) {
44+
cnt += Dfs(g, b, a, d - 1);
45+
}
46+
}
47+
return cnt;
48+
}
49+
}

solution/3300-3399/3372.Maximize the Number of Target Nodes After Connecting Trees I/Solution.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ def maxTargetNodes(
44
) -> List[int]:
55
def build(edges: List[List[int]]) -> List[List[int]]:
66
n = len(edges) + 1
7-
tree = [[] for _ in range(n)]
7+
g = [[] for _ in range(n)]
88
for a, b in edges:
9-
tree[a].append(b)
10-
tree[b].append(a)
11-
return tree
9+
g[a].append(b)
10+
g[b].append(a)
11+
return g
1212

1313
def dfs(g: List[List[int]], a: int, fa: int, d: int) -> int:
1414
if d < 0:

0 commit comments

Comments
 (0)