@@ -55,27 +55,27 @@ impl HLD {
55
55
let n = adj. len ( ) ;
56
56
let mut p = vec ! [ None ; n] ;
57
57
let mut siz = vec ! [ 0 ; n] ;
58
- for & u in get_dfs_postorder ( adj) . iter ( ) {
59
- adj[ u ] . retain ( |& v | siz[ v ] > 0 ) ;
60
- siz[ u ] = 1 ;
61
- for i in 0 ..adj[ u ] . len ( ) {
62
- let v = adj[ u ] [ i] ;
63
- p[ v ] = Some ( u ) ;
64
- siz[ u ] += siz[ v ] ;
65
- if siz[ v ] > siz[ adj[ u ] [ 0 ] ] {
66
- adj[ u ] . swap ( 0 , i) ;
58
+ for & v in get_dfs_postorder ( adj) . iter ( ) {
59
+ adj[ v ] . retain ( |& u | siz[ u ] > 0 ) ;
60
+ siz[ v ] = 1 ;
61
+ for i in 0 ..adj[ v ] . len ( ) {
62
+ let u = adj[ v ] [ i] ;
63
+ p[ u ] = Some ( v ) ;
64
+ siz[ v ] += siz[ u ] ;
65
+ if siz[ u ] > siz[ adj[ v ] [ 0 ] ] {
66
+ adj[ v ] . swap ( 0 , i) ;
67
67
}
68
68
}
69
69
}
70
70
let mut tin = vec ! [ 0 ; n] ;
71
71
let mut head = vec ! [ 0 ; n] ;
72
72
let mut d = vec ! [ 0 ; n] ;
73
73
let ord = get_dfs_preorder ( adj) ;
74
- for ( i, & u ) in ord. iter ( ) . enumerate ( ) {
75
- tin[ u ] = i;
76
- for & v in & adj[ u ] {
77
- d[ v ] = 1 + d[ u ] ;
78
- head[ v ] = if v == adj[ u ] [ 0 ] { head[ u ] } else { v } ;
74
+ for ( i, & v ) in ord. iter ( ) . enumerate ( ) {
75
+ tin[ v ] = i;
76
+ for & u in & adj[ v ] {
77
+ d[ u ] = 1 + d[ v ] ;
78
+ head[ u ] = if u == adj[ v ] [ 0 ] { head[ v ] } else { u } ;
79
79
}
80
80
}
81
81
HLD {
@@ -113,13 +113,13 @@ impl HLD {
113
113
) ;
114
114
}
115
115
116
- /// Gets range representing the subtree of u
116
+ /// Gets range representing the subtree of v
117
117
///
118
118
/// # Complexity
119
119
/// - Time: O(1)
120
120
/// - Space: O(1)
121
- pub fn sub_tree ( & self , u : usize ) -> Range < usize > {
122
- self . tin [ u ] + self . vals_edges as usize ..self . tin [ u ] + self . siz [ u ]
121
+ pub fn sub_tree ( & self , v : usize ) -> Range < usize > {
122
+ self . tin [ v ] + self . vals_edges as usize ..self . tin [ v ] + self . siz [ v ]
123
123
}
124
124
125
125
/// Gets the lowest common ancestor of u and v
@@ -171,14 +171,14 @@ impl HLD {
171
171
/// # Complexity
172
172
/// - Time: O(log n)
173
173
/// - Space: O(1)
174
- pub fn kth_par ( & self , mut u : usize , mut k : usize ) -> Option < usize > {
174
+ pub fn kth_par ( & self , mut v : usize , mut k : usize ) -> Option < usize > {
175
175
loop {
176
- let len_path = self . tin [ u ] - self . tin [ self . head [ u ] ] ;
176
+ let len_path = self . tin [ v ] - self . tin [ self . head [ v ] ] ;
177
177
if k <= len_path {
178
- return Some ( self . ord [ self . tin [ u ] - k] ) ;
178
+ return Some ( self . ord [ self . tin [ v ] - k] ) ;
179
179
}
180
- match self . p [ self . head [ u ] ] {
181
- Some ( v ) => u = v ,
180
+ match self . p [ self . head [ v ] ] {
181
+ Some ( u ) => v = u ,
182
182
None => return None ,
183
183
}
184
184
k -= len_path + 1 ;
0 commit comments