Pagini recente » Cod sursa (job #1358786) | Cod sursa (job #2547170) | Cod sursa (job #1580228) | Cod sursa (job #1084658) | Cod sursa (job #2193382)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <bitset>
#define NMAX 100002
using namespace std;
ifstream f("ctc.in");
ofstream o("ctc.out");
int n,m;
vector <int> g[NMAX], g2[NMAX], st, aux;
vector <vector<int>> fin;
bitset <NMAX> viz;
void input()
{
f >> n >> m;
int x,y;
for(int i = 1; i <= m; ++i)
{
f >> x >> y;
g[x].push_back(y);
g2[y].push_back(x);
}
}
void dfs(int nod)
{
viz[nod] = true;
for(auto i: g[nod])
if(not viz[i])
dfs(i);
st.push_back(nod);
}
void dfs2(int nod)
{
viz[nod] = true;
aux.push_back(nod);
for(auto i: g2[nod])
if(not viz[i])
dfs2(i);
}
void output()
{
o << fin.size() << '\n';
for(auto i: fin)
{
for(auto j: i)
o << j << ' ';
o << '\n';
}
}
int main()
{
input();
for(int i = 1; i <= n; ++i)
if(not viz[i])
dfs(i);
viz.reset();
reverse(st.begin(), st.end());
for(auto i: st)
if(not viz[i])
{
aux.clear();
dfs2(i);
fin.push_back(aux);
}
output();
return 0;
}