Pagini recente » Cod sursa (job #1869796) | Cod sursa (job #461687) | Cod sursa (job #873544) | Cod sursa (job #594938) | Cod sursa (job #1804095)
#include <iostream>
#include<fstream>
#include<vector>
using namespace std;
const int nmax=100005;
vector<int> v[nmax],vt[nmax],ctc[nmax];
int postordine[nmax];
bool viz[nmax];
int i,j,n,m,k,a,b,rasp,ind,x;
void dfs(int x)
{
viz[x]=1;
for(int i=0;i<v[x].size();i++)
if(!viz[v[x][i]])
dfs(v[x][i]);
k++;postordine[k]=x;
}
void dfst(int x)
{
viz[x]=0;ctc[rasp].push_back(x);
for(int i=0;i<vt[x].size();i++)
if(viz[vt[x][i]])
dfst(vt[x][i]);
}
int main()
{
ifstream f("ctc.in");
ofstream g("ctc.out");
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>a>>b;
v[a].push_back(b);
vt[b].push_back(a);
}
for(ind=1;ind<=n;ind++)
{
if(!viz[ind])
dfs(ind);
}
for(ind=n;ind>=1;ind--)
{
x=postordine[ind];
if(viz[x])
{rasp++;dfst(x);}
}
g<<rasp<<'\n';
for(i=1;i<=rasp;i++)
{
for(j=0;j<ctc[i].size();j++)
g<<ctc[i][j]<<' ';
g<<'\n';
}
return 0;
}