Pagini recente » Cod sursa (job #2735932) | Cod sursa (job #1063046) | Cod sursa (job #1654067) | Cod sursa (job #1404843) | Cod sursa (job #2272025)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("ctc.in");
ofstream cout ("ctc.out");
vector <int> v[100003];
vector <int> vv[100003];
vector <int> vvv[100003];
int n,m,viz[100003],rez[100003],k=0;
void citire ()
{
int i,a,b,j;
cin>>n>>m;
for(j=1; j<=m; ++j)
{
cin>>a>>b;
v[a].push_back(b);
vv[b].push_back(a);
}
}
void dfs (int poz)
{
viz[poz]=1;
int i,nn;
for(i=0;i<v[poz].size();++i)
{
nn=v[poz][i];
if(!viz[nn])
dfs(nn);
}
rez[++k]=poz;
}
void cazanelu (int poz)
{
int i,nn;
viz[poz]=2;
vvv[k].push_back(poz);
for(i=0;i<vv[poz].size();++i)
{
nn=vv[poz][i];
if(viz[nn]!=2)
cazanelu(nn);
}
}
int main()
{
int i,j;
citire();
for(i=1;i<=n;++i)
{
if(!viz[i])
dfs(i);
}
k=0;
for(i=n;i>=1;--i)
{
int delimanu=rez[i]; /// ca zan zan zan ca zan zan zan buri buri buri buri ca zan zan zan ca zan zan zan buri buri buri buri piperneaa
if(viz[delimanu]==2)
continue;
++k;
cazanelu(delimanu);/// contu' mic.... stii ce zic! :)
}
cout<<k<<'\n';
for(i=1;i<=k;++i)
{
for(j=0;j<vvv[i].size();++j)
cout<<vvv[i][j]<<' ';
cout<<'\n';
}
return 0;
}