Pagini recente » Cod sursa (job #3280413) | Cod sursa (job #2398857) | Cod sursa (job #1259342) | Cod sursa (job #534938) | Cod sursa (job #1917162)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
const int nmax = 100005;
int N,M,a[nmax],len,Lg;
bool viz[nmax];
vector < int > L[nmax];
vector < int > T[nmax];
vector < int > ans[nmax];
inline void Read()
{
int x,y;
fin >> N >> M;
while(M--)
{
fin >> x >> y;
L[x].push_back(y);
T[y].push_back(x);
}
}
inline void DFS1(int nod)
{
viz[nod] = true;
for(auto it : L[nod])
if(!viz[it]) DFS1(it);
a[++len] = nod;
}
inline void DFS2(int nod)
{
viz[nod] = false;
ans[Lg].push_back(nod);
for(auto it : T[nod])
if(viz[it])
DFS2(it);
}
inline void Solve()
{
int i;
for(i = 1; i <= N; i++)
if(!viz[i]) DFS1(i);
for(i = N; i; i--)
if(viz[a[i]])
{
++Lg;
DFS2(a[i]);
}
fout << Lg << "\n";
for(i = 1; i <= Lg; i++)
{
for(auto it : ans[i])
fout << it << " ";
fout << "\n";
}
}
int main()
{
Read();
Solve();
fout.close();
return 0;
}