Pagini recente » Cod sursa (job #775491) | Cod sursa (job #520373) | Cod sursa (job #1468823) | Cod sursa (job #704206) | Cod sursa (job #3215398)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("ctc.in");
ofstream cout("ctc.out");
using pii = pair<int,int>;
const int nmax = 1e5 + 1;
vector <int> g[nmax];
vector <int> t[nmax];
int n , m , a , b, ind , top[nmax];
bool viz[nmax];
vector <int> aux;
void tsort(int x)
{
viz[x] = 1;
for(auto it : g[x])
{
if(!viz[it]) tsort(it);
}
top[ind--] = x;
}
vector <vector <int>> ctc;
void find_ctc(int x)
{
viz[x] = 1;
aux.push_back(x);
for(auto it : t[x])
{
if(!viz[it]) find_ctc(it);
}
}
signed main()
{
cin >> n >> m;
ind = n;
for(int i = 1 ; i <= m ; ++i)
{
cin >> a >> b;
g[a].push_back(b);
t[b].push_back(a);
}
for(int i = 1 ; i <= n ; ++i) if(!viz[i]) tsort(i);
for(int i = 1 ; i <= n ; ++i) viz[i] = 0;
for(int i = 1 ; i <= n ; ++i)
{
if(!viz[top[i]])
{
aux.clear();
find_ctc(top[i]);
ctc.push_back(aux);
}
}
cout << ctc.size() << '\n';
for(auto ala : ctc)
{
for(auto it : ala)
{
cout << it <<' ';
}
cout << '\n';
}
return 0;
}