Pagini recente » Cod sursa (job #2257962) | Cod sursa (job #560124) | Cod sursa (job #1438888) | Cod sursa (job #1420371) | Cod sursa (job #3144146)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
short viz[100005];
vector <int> v[100005];
vector <int> inv[100005];
vector <int> sol[100005];
vector <int> f;
int n,m;
int nr;
void dfs(int nod)
{
viz[nod]=1;
for(auto& i : v[nod])
if(viz[i]!=1)
dfs(i);
f.push_back(nod);
}
void inv_dfs(int nod)
{
viz[nod]=-1;
sol[nr].push_back(nod);
for(auto& i : inv[nod])
if(viz[i]!=-1)
inv_dfs(i);
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;
fin>>x>>y;
v[x].push_back(y);
inv[y].push_back(x);
}
for(int i=1;i<=n;i++)
if(viz[i]!=1)
dfs(i);
for(int i=n-1;i>=0;i--)
if(viz[f[i]]!=-1)
nr++,inv_dfs(f[i]);
fout<<nr<<'\n';
for(int i=1;i<=nr;i++)
{
for(auto& j : sol[i])
fout<<j<<' ';
fout<<'\n';
}
}