#ifndef ITALIANO_H_ #define ITALIANO_H_ #include "algorithm/roditty_zwick.h" #include "algorithm/tarjan.h" #include "tree/breadth_first_tree.h" #include using namespace graph; using namespace tree; namespace algo { template class Italiano : public RodittyZwick { public: Italiano(Digraph G) : G(G) {} void init(); bool query(const T& u, const T& v); void remove(const T& u, const T& v); private: Digraph G; // Connect each vertex with its representative SCC std::map> TC; // Reachability trees std::map> RT; // Incoming / Outgoing edges struct Edges { std::forward_list Ein; std::forward_list Eout; }; std::map, Edges> E; }; template void Italiano::init() { } template bool Italiano::query(const T& u, const T& v) { return TC[u] == TC[v]; } template void Italiano::remove(const T& u, const T& v) { } } // namespace algo #endif