Pagini recente » Cod sursa (job #156447) | Cod sursa (job #1354777) | Cod sursa (job #2737143) | Cod sursa (job #3239005) | Cod sursa (job #2120287)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("ctc.in");
ofstream fout ("ctc.out");
const int Nmax = 100005;
vector < int > L[Nmax] , G[Nmax] , sol[Nmax];
int timp[Nmax] , k , n , m , cc;
bool viz[Nmax];
void DFST(int varf)
{
viz[varf] = true;
for(auto i : L[varf])
if(!viz[i])
DFST(i);
++k;
timp[k] = varf;
}
void DFS_Solve(int varf)
{
viz[varf] = true;
for(auto i : G[varf])
if(!viz[i])
DFS_Solve(i);
sol[cc] . push_back(varf);
}
int main()
{
int x , y;
fin >> n >> m;
for(int i = 1 ; i <= m ; i++)
{
fin >> x >> y;
L[x] . push_back(y);
G[y] . push_back(x);
}
for(int i = 1 ; i <= n ; i++)
if(!viz[i])
DFST(i);
for(int i = 1 ; i <= n ; i++)
viz[i] = false;
for(int i = k ; i >= 1 ; i--)
if(!viz[timp[i]])
{
++cc;
DFS_Solve(timp[i]);
}
fout << cc << "\n";
for(int pas = 1 ; pas <= cc ; pas++)
{
for(auto i : sol[pas])
fout << i << " ";
fout << "\n";
}
fin.close();
fout.close();
return 0;
}