node DynamicSPQRTree::rootTreeAt(node vT) { vT = findSPQR(vT); node uT = vT; edge eH = nullptr; for (;;) { edge fH = m_tNode_hRefEdge[uT]; m_tNode_hRefEdge[uT] = eH; if (!fH) break; eH = m_hEdge_twinEdge[fH]; uT = spqrproper(eH); } m_rootEdge = nullptr; return m_bNode_SPQR[m_B.firstNode()] = vT; }
node DynamicSPQRForest::findSPQR (node vT) const { if (!vT) return vT; if (m_tNode_owner[vT]==vT) return vT; return m_tNode_owner[vT] = findSPQR(m_tNode_owner[vT]); }