74 int level(
node v)
const {
return m_n == 1 ? 0 : m_level[m_representative[v]]; }
104 const int&
sparseTable(
int i,
int j)
const {
return m_table[i * m_rangeJ +
j - 1]; }
114 int rmq(
int u,
int v)
const;
Includes declaration of graph class.
The parameterized class Array implements dynamic arrays of type E.
Data type for general directed graphs (adjacency list representation).
Implements the <O(n log n), O(1)>-time "sparse table" algorithm by Bender and Farach-Colton to comput...
int level(node v) const
Returns the level of a node. The level of the root is 0.
int & sparseTable(int i, int j)
LCA(const Graph &G, node root=nullptr)
Builds the LCA data structure for an arborescence.
Array< int > m_level
L[i] is distance of node E[i] from root.
void dfs(const Graph &G, node root)
Performs an Euler tour (actually a DFS with virtual back-edges) through the underlying tree and fills...
int rmq(int u, int v) const
Returns the internal index pointing to the LCA between two nodes u and v.
node call(node u, node v) const
Returns the LCA of two nodes u and v.
Array< node > m_euler
Euler[i] is i-th node visited in Euler Tour.
NodeArray< int > m_representative
Euler[Representative[v]] = v.
const int m_rangeJ
always floor(log(m_len)) (size of a row in the table)
Array< int > m_table
preprocessed M[i,j] array
const int m_n
number of nodes in graph
const int m_len
length of the RMQ array (always 2 m_n - 1)
const int & sparseTable(int i, int j) const
Access the sparse table at [i, j].
const node m_root
the root of the tree
void buildTable()
Fills the O(n log n)-space matrix with auxiliary data the LCA values can be computed from.
Dynamic arrays indexed with nodes.
Class for the representation of nodes.
#define OGDF_EXPORT
Specifies that a function or class is exported by the OGDF DLL.
static MultilevelBuilder * getDoubleFactoredZeroAdjustedMerger()
The namespace for all OGDF objects.