Pagini recente » Cod sursa (job #2110942) | Cod sursa (job #1919429) | Cod sursa (job #1324670) | Cod sursa (job #61729) | Cod sursa (job #2722346)
#include <fstream>
#define mF "ctc"
std::ifstream in(mF ".in");
std::ofstream out(mF ".out");
constexpr int N = 100001; int A[N], B[N], l;
#include <vector>
std::vector<int> L[N], S; std::vector<std::vector<int>> R;
#include <bitset>
std::bitset<N> E, F;
void DFS(int t)
{
A[t] = B[t] = l++; F[t] = true; S.push_back(t);
for (int f: L[t]) if (!E[f]) {if (!F[f]) DFS(f); B[t] = std::min(B[t], B[f]);}
if (A[t] == B[t]) {R.emplace_back(); do E[S.back()] = true, R.back().push_back(S.back()), S.pop_back(); while (R.back().back() != t);}
}
int main()
{
int n, m; in >> n >> m; while (m--) {int a, b; in >> a >> b; L[a].push_back(b);}
for (int t = 1; t <= n; t++) if (!E[t]) DFS(t);
out << R.size() << '\n'; for (auto r: R) {for (int e: r) out << e << ' '; out << '\n';}
}