Skip to main content

competitive/tree/
mod.rs

1//! tree algorithms
2
3use crate::{
4    algebra::{Magma, Monoid, Unital},
5    data_structure::RangeMinimumQuery,
6    graph::UndirectedSparseGraph,
7    math::{ConvolveSteps, U64Convolve},
8    tools::{RandomSpec, Xorshift},
9};
10
11#[codesnip::entry("centroid_decomposition")]
12pub use self::centroid_decomposition::ContourQueryRange;
13#[codesnip::entry("tree_generator")]
14pub use self::generator::*;
15#[codesnip::entry("HeavyLightDecomposition")]
16pub use self::heavy_light_decomposition::HeavyLightDecomposition;
17#[codesnip::entry("LevelAncestor")]
18pub use self::level_ancestor::LevelAncestor;
19pub use self::rerooting::ReRooting;
20#[codesnip::entry("StaticTopTree")]
21pub use self::static_top_tree::{Cluster, MonoidCluster, StaticTopTree, StaticTopTreeDp};
22pub use self::tree_center::*;
23pub use self::tree_hash::TreeHasher;
24
25#[cfg_attr(
26    nightly,
27    codesnip::entry(
28        "centroid_decomposition",
29        include("SparseGraph", "NumberTheoreticTransform")
30    )
31)]
32mod centroid_decomposition;
33mod depth;
34#[cfg_attr(
35    nightly,
36    codesnip::entry("EulerTour", include("RangeMinimumQuery", "SparseGraph", "tree_depth"))
37)]
38mod euler_tour;
39#[cfg_attr(
40    nightly,
41    codesnip::entry("tree_generator", include("SparseGraph", "random_generator"))
42)]
43mod generator;
44#[cfg_attr(
45    nightly,
46    codesnip::entry("HeavyLightDecomposition", include("algebra", "SparseGraph"))
47)]
48mod heavy_light_decomposition;
49#[cfg_attr(nightly, codesnip::entry("LevelAncestor", include("SparseGraph")))]
50mod level_ancestor;
51mod rerooting;
52#[cfg_attr(
53    nightly,
54    codesnip::entry("StaticTopTree", include("algebra", "SparseGraph"))
55)]
56mod static_top_tree;
57mod tree_center;
58#[cfg_attr(nightly, codesnip::entry("tree_centroid", include("SparseGraph")))]
59mod tree_centroid;
60mod tree_dp;
61mod tree_hash;
62mod tree_order;