14
14
*/
15
15
16
16
public class HeavyLightDecomposition {
17
- private List <Integer >[] tree ;
17
+ private List <List < Integer >> tree ;
18
18
private int [] parent ;
19
19
private int [] depth ;
20
20
private int [] subtreeSize ;
@@ -24,11 +24,10 @@ public class HeavyLightDecomposition {
24
24
private int [] segmentTree ;
25
25
private int positionIndex ;
26
26
27
- @ SuppressWarnings ("unchecked" )
28
27
public HeavyLightDecomposition (int n ) {
29
- tree = new ArrayList [ n + 1 ] ;
28
+ tree = new ArrayList <>() ;
30
29
for (int i = 0 ; i <= n ; i ++) {
31
- tree [ i ] = new ArrayList <>();
30
+ tree . add ( new ArrayList <>() );
32
31
}
33
32
parent = new int [n + 1 ];
34
33
depth = new int [n + 1 ];
@@ -52,14 +51,14 @@ public int getPositionIndex() {
52
51
}
53
52
54
53
public void addEdge (int u , int v ) {
55
- tree [ u ] .add (v );
56
- tree [ v ] .add (u );
54
+ tree . get ( u ) .add (v );
55
+ tree . get ( v ) .add (u );
57
56
}
58
57
59
58
private void dfsSize (int node , int parentNode ) {
60
59
parent [node ] = parentNode ;
61
60
subtreeSize [node ] = 1 ;
62
- for (int child : tree [ node ] ) {
61
+ for (int child : tree . get ( node ) ) {
63
62
if (child != parentNode ) {
64
63
depth [child ] = depth [node ] + 1 ;
65
64
dfsSize (child , node );
@@ -73,7 +72,7 @@ private void decompose(int node, int head) {
73
72
position [node ] = positionIndex ++;
74
73
int heavyChild = -1 ;
75
74
int maxSubtreeSize = -1 ;
76
- for (int child : tree [ node ] ) {
75
+ for (int child : tree . get ( node ) ) {
77
76
if (child != parent [node ] && subtreeSize [child ] > maxSubtreeSize ) {
78
77
heavyChild = child ;
79
78
maxSubtreeSize = subtreeSize [child ];
@@ -82,7 +81,7 @@ private void decompose(int node, int head) {
82
81
if (heavyChild != -1 ) {
83
82
decompose (heavyChild , head );
84
83
}
85
- for (int child : tree [ node ] ) {
84
+ for (int child : tree . get ( node ) ) {
86
85
if (child != parent [node ] && child != heavyChild ) {
87
86
decompose (child , child );
88
87
}
0 commit comments