pub fn rooted_heavy_order(
vertices_size: usize,
edges: &[(usize, usize)],
) -> Vec<(usize, usize, bool)>Examples found in repository?
crates/competitive/src/tree/link_cut_tree.rs (line 171)
165 pub fn from_edges<T>(values: T, edges: &[(usize, usize)]) -> Self
166 where
167 T: IntoIterator<Item = S::Value>,
168 {
169 let tree: Self = values.into_iter().collect();
170 for (child, parent, preferred) in
171 splay_operations::rooted_heavy_order(tree.nodes.len(), edges)
172 .into_iter()
173 .rev()
174 {
175 let child = tree.node(child);
176 let mut parent = tree.node(parent);
177 unsafe {
178 (*child.as_ptr()).parent.parent = Some(parent);
179 if preferred {
180 parent.as_mut().child[1] = Some(child);
181 } else {
182 LinkCutBstSpec::<S>::with_two_inner_mut(parent, child, S::attach_virtual);
183 }
184 Self::pull(parent);
185 }
186 }
187 tree
188 }More examples
crates/competitive/src/tree/top_tree.rs (line 325)
319 pub fn from_edges<T>(values: T, edges: &[(usize, usize)]) -> Self
320 where
321 T: IntoIterator<Item = S::Info>,
322 {
323 let mut tree: Self = values.into_iter().collect();
324 for (child, parent, preferred) in
325 splay_operations::rooted_heavy_order(tree.nodes.len(), edges)
326 .into_iter()
327 .rev()
328 {
329 let child = tree.node(child);
330 let mut parent = tree.node(parent);
331 unsafe {
332 (*child.as_ptr()).parent.parent = Some(parent);
333 if preferred {
334 parent.as_mut().child[1] = Some(child);
335 } else {
336 let point = S::add_edge(&child.as_ref().data.sum);
337 let (light, entry) = tree.rake_insert(parent.as_ref().data.light, point);
338 parent.as_mut().data.light = Some(light);
339 (*child.as_ptr()).data.belong = Some(entry);
340 }
341 Self::pull_top(parent);
342 }
343 }
344 tree
345 }