@@ -6,70 +6,67 @@ package g3301_3400.s3372_maximize_the_number_of_target_nodes_after_connecting_tr
6
6
import kotlin.math.max
7
7
8
8
class Solution {
9
- private fun getGraph (edges : Array <IntArray >): Array <ArrayList <Int ?> ? > {
9
+ private fun getGraph (edges : Array <IntArray >): Array <ArrayList <Int > > {
10
10
val n = edges.size + 1
11
- val graph: Array <ArrayList <Int ?>? > = arrayOfNulls<ArrayList <Int ?>? > (n)
12
- for (i in 0 .. < n) {
13
- graph[i] = ArrayList <Int ?>()
14
- }
11
+ val graph: Array <ArrayList <Int >> = Array <ArrayList <Int >>(n) { ArrayList <Int >() }
15
12
for (edge in edges) {
16
13
val u = edge[0 ]
17
14
val v = edge[1 ]
18
- graph[u]!! .add(v)
19
- graph[v]!! .add(u)
15
+ graph[u].add(v)
16
+ graph[v].add(u)
20
17
}
21
18
return graph
22
19
}
23
20
24
- private fun dfs (graph : Array <ArrayList <Int ?> ? >, u : Int , pt : Int , dp : Array <IntArray ? >, k : Int ) {
25
- for (v in graph[u]!! ) {
21
+ private fun dfs (graph : Array <ArrayList <Int > >, u : Int , pt : Int , dp : Array <IntArray >, k : Int ) {
22
+ for (v in graph[u]) {
26
23
if (v == pt) {
27
24
continue
28
25
}
29
- dfs(graph, v!! , u, dp, k)
26
+ dfs(graph, v, u, dp, k)
30
27
for (i in 0 .. < k) {
31
- dp[u]!! [i + 1 ] + = dp[v]!! [i]
28
+ dp[u][i + 1 ] + = dp[v][i]
32
29
}
33
30
}
34
- dp[u]!! [0 ] = dp[u]!! [0 ] + 1
31
+ dp[u][0 ] = dp[u][0 ] + 1
35
32
}
36
33
37
34
private fun dfs2 (
38
- graph : Array <ArrayList <Int ?> ? >,
35
+ graph : Array <ArrayList <Int > >,
39
36
u : Int ,
40
37
pt : Int ,
41
38
ptv : IntArray ,
42
- fdp : Array <IntArray ? >,
43
- dp : Array <IntArray ? >,
39
+ fdp : Array <IntArray >,
40
+ dp : Array <IntArray >,
44
41
k : Int ,
45
42
) {
46
- fdp[u]!! [0 ] = dp[u]!! [0 ]
43
+ fdp[u][0 ] = dp[u][0 ]
47
44
for (i in 1 .. k) {
48
- fdp[u]!! [i] = (dp[u]!! [i] + ptv[i - 1 ])
45
+ fdp[u][i] = (dp[u][i] + ptv[i - 1 ])
49
46
}
50
- for (v in graph[u]!! ) {
47
+ for (v in graph[u]) {
51
48
if (v == pt) {
52
49
continue
53
50
}
54
51
val nptv = IntArray (k + 1 )
55
52
for (i in 0 .. < k) {
56
- nptv[i + 1 ] = dp[u]!! [i + 1 ] - dp[v!! ] !! [i] + ptv[i]
53
+ nptv[i + 1 ] = dp[u][i + 1 ] - dp[v] [i] + ptv[i]
57
54
}
58
55
nptv[0 ] = 1
59
- dfs2(graph, v!! , u, nptv, fdp, dp, k)
56
+ dfs2(graph, v, u, nptv, fdp, dp, k)
60
57
}
61
58
}
62
59
63
- private fun get (edges : Array <IntArray >, k : Int ): Array <IntArray ? > {
60
+ private fun get (edges : Array <IntArray >, k : Int ): Array <IntArray > {
64
61
val graph = getGraph(edges)
65
62
val n = graph.size
66
- val dp = Array <IntArray ? >(n) { IntArray (k + 1 ) }
67
- val fdp = Array <IntArray ? >(n) { IntArray (k + 1 ) }
63
+ val dp = Array <IntArray >(n) { IntArray (k + 1 ) }
64
+ val fdp = Array <IntArray >(n) { IntArray (k + 1 ) }
68
65
dfs(graph, 0 , - 1 , dp, k)
69
66
dfs2(graph, 0 , - 1 , IntArray (k + 1 ), fdp, dp, k)
70
67
for (i in 0 .. < n) {
71
68
for (j in 1 .. k) {
72
- fdp[i]!! [j] + = fdp[i]!! [j - 1 ]
69
+ fdp[i][j] + = fdp[i][j - 1 ]
73
70
}
74
71
}
75
72
return fdp
@@ -85,12 +82,12 @@ class Solution {
85
82
run {
86
83
var i = 0
87
84
while (k != 0 && i < m) {
88
- max = max(max.toDouble(), b[i]!! [k - 1 ].toDouble()).toInt()
85
+ max = max(max.toDouble(), b[i][k - 1 ].toDouble()).toInt()
89
86
i++
90
87
}
91
88
}
92
89
for (i in 0 .. < n) {
93
- ans[i] = a[i]!! [k] + max
90
+ ans[i] = a[i][k] + max
94
91
}
95
92
return ans
96
93
}
0 commit comments