Skip to content

Commit 1c4c5e8

Browse files
committed
add sol
1 parent f8e695b commit 1c4c5e8

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

leetcode/daily/3372/sol.go

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
// https://leetcode.com/problems/maximize-the-number-of-target-nodes-after-connecting-trees-i/description/
2+
3+
package main
4+
5+
import "fmt"
6+
7+
func maxTargetNodes(edges1 [][]int, edges2 [][]int, k int) []int {
8+
n1 := 0
9+
n2 := 0
10+
11+
for _, edge := range edges1 {
12+
if edge[0] > n1 {
13+
n1 = edge[0]
14+
}
15+
if edge[1] > n1 {
16+
n1 = edge[1]
17+
}
18+
}
19+
20+
for _, edge := range edges2 {
21+
if edge[0] > n2 {
22+
n2 = edge[0]
23+
}
24+
if edge[1] > n2 {
25+
n2 = edge[1]
26+
}
27+
}
28+
29+
graph1 := make([][]int, n1+1)
30+
graph2 := make([][]int, n2+1)
31+
32+
for _, edge := range edges1 {
33+
graph1[edge[0]] = append(graph1[edge[0]], edge[1])
34+
graph1[edge[1]] = append(graph1[edge[1]], edge[0])
35+
}
36+
37+
for _, edge := range edges2 {
38+
graph2[edge[0]] = append(graph2[edge[0]], edge[1])
39+
graph2[edge[1]] = append(graph2[edge[1]], edge[0])
40+
}
41+
42+
maxTargetsTree2 := 0
43+
for i := 0; i <= n2; i++ {
44+
reachable := dfs(graph2, i, -1, k-1)
45+
if reachable > maxTargetsTree2 {
46+
maxTargetsTree2 = reachable
47+
}
48+
}
49+
50+
result := make([]int, n1+1)
51+
for i := 0; i <= n1; i++ {
52+
reachableInTree1 := dfs(graph1, i, -1, k)
53+
result[i] = reachableInTree1 + maxTargetsTree2
54+
}
55+
56+
return result
57+
}
58+
59+
func dfs(graph [][]int, node int, parent int, depth int) int {
60+
if depth < 0 {
61+
return 0
62+
}
63+
count := 1
64+
for _, neighbor := range graph[node] {
65+
if neighbor != parent {
66+
count += dfs(graph, neighbor, node, depth-1)
67+
}
68+
}
69+
return count
70+
}
71+
72+
func main() {
73+
edges1 := [][]int{{0, 1}, {0, 2}, {2, 3}, {2, 4}}
74+
edges2 := [][]int{{0, 1}, {0, 2}, {0, 3}, {2, 7}, {1, 4}, {4, 5}, {4, 6}}
75+
k := 2
76+
77+
fmt.Println(maxTargetNodes(edges1, edges2, k))
78+
}

0 commit comments

Comments
 (0)