86 for (
size_t id_x = 0, n = nodes_.size(); id_x != n; ++id_x) {
87 auto &x = nodes_[id_x];
88 if (x.visited_ == prev_phase_()) {
90 auto push = [&stack, &trail, &index,
this](
size_t id_x) {
91 auto &x = nodes_[id_x];
93 x.finished_ = x.out.begin();
94 stack.emplace_back(id_x);
95 trail.emplace_back(id_x);
98 while (!stack.empty()) {
99 auto id_y = stack.back();
100 auto &y = nodes_[id_y];
101 auto end = y.out.end();
102 for (; y.finished_ != end && nodes_[*y.finished_].visited_ != prev_phase_(); ++y.finished_) {
104 if (y.finished_ != end) {
105 push(*y.finished_++);
109 for (
auto id_z : y.out) {
110 auto &z = nodes_[id_z];
111 if (z.visited_ != phase_ && z.visited_ < y.visited_) {
113 y.visited_ = z.visited_;
118 scc.emplace_back(trail.back());
119 nodes_[trail.back()].visited_ = phase_;
121 }
while (scc.back() != id_y);
129 phase_ = prev_phase_();