Pagini recente » Cod sursa (job #805781) | Cod sursa (job #1042462) | Cod sursa (job #2688311) | Cod sursa (job #2990267) | Cod sursa (job #3212256)
#include <fstream>
#include <stack>
#include <vector>
using namespace std;
ifstream cin("ctc.in");
ofstream cout("ctc.out");
const int NMAX = 100001;
int nrCtc;
stack<int>s;
vector<int>g[NMAX];
vector<int>gt[NMAX];
vector<int>f;
vector<int>ctc[NMAX];
int n, m;
void dfsp(int nod)
{
f[nod] = 1;
for (auto x : g[nod])
if (!f[x])
dfsp(x);
s.push(nod);
}
void dfsm(int nod)
{
f[nod] = 2;
ctc[nrCtc].push_back(nod);
for (auto x : gt[nod])
if (f[x] == 1)
dfsm(x);
}
int main()
{
cin >> n >> m;
f.resize(n+1);
for (int i = 0; i < m; i++)
{
int x, y;
cin >> x >> y;
g[x].push_back(y);
gt[y].push_back(x);
}
for (int i = 1; i <= n; i++)
if (!f[i])
dfsp(i);
while (!s.empty())
{
if (f[s.top()] == 1)
{
nrCtc++;
dfsm(s.top());
}
s.pop();
}
cout << nrCtc << '\n';
for (int i = 1; i <= nrCtc; i++,cout << '\n')
for (int j = 0; j < ctc[i].size(); j++)
cout << ctc[i][j] << ' ';
return 0;
}