Pagini recente » Cod sursa (job #2819489) | Cod sursa (job #135128) | Cod sursa (job #1007233) | Cod sursa (job #145757) | Cod sursa (job #2366972)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("ctc.in");
ofstream fout ("ctc.out");
const int Nmax = 100005;
vector < int > L[Nmax];
vector < int > H[Nmax];
vector < int > Sol[Nmax];
int a[Nmax] , n , m , k , ans;
bool viz[Nmax];
void DFS(int nod)
{
viz[nod] = true;
for(auto it : L[nod])
if(!viz[it])
DFS(it);
a[++k] = nod;
}
void DFS1(int nod)
{
viz[nod] = 1;
Sol[ans].push_back(nod);
for(auto it : H[nod])
if(!viz[it])
DFS1(it);
}
int main()
{
int x , y;
fin >> n >> m;
for(int i = 1 ; i <= m ; i++)
{
fin >> x >> y;
L[x].push_back(y);
H[y].push_back(x);
}
for(int i = 1 ; i <= n ; i++)
if(!viz[i])
DFS(i);
for(int i = 1 ; i <= n ; i++)
viz[i] = false;
for(int i = k ; i >= 1 ; i--)
if(!viz[a[i]])
{
ans++;
DFS1(a[i]);
}
fout << ans << '\n';
for(int i = 1 ; i <= ans ; i++)
{
for(auto it : Sol[i])
fout << it << " ";
fout << "\n";
}
fin.close();
fout.close();
}