Pagini recente » Cod sursa (job #2979602) | Cod sursa (job #736280) | Cod sursa (job #2365609) | Cod sursa (job #1952631) | Cod sursa (job #1046612)
#include <fstream>
#include <vector>
#define Nmax 100005
using namespace std;
int N,st[Nmax],top,nrsol;
vector <int> L[Nmax],T[Nmax],sol[Nmax];
bool viz[Nmax];
inline void Read()
{
int i,x,y,M;
ifstream fin("ctc.in");
fin>>N>>M;
for(i=1;i<=M;++i)
{
fin>>x>>y;
L[x].push_back(y);
T[y].push_back(x);
}
fin.close();
}
inline void Dfs(int nod)
{
int i,len,j;
len=L[nod].size();
viz[nod]=true;
for(i=0;i<len;++i)
{
j=L[nod][i];
if(!viz[j])
Dfs(j);
}
st[++top]=nod;
}
inline void Dfs2(int nod)
{
int i,len,j;
len=T[nod].size();
viz[nod]=true;
for(i=0;i<len;++i)
{
j=T[nod][i];
if(!viz[j])
Dfs2(j);
}
sol[nrsol].push_back(nod);
}
inline void Solve()
{
int i,j,len,nod;
for(i=1;i<=N;++i)
if(!viz[i])
Dfs(i);
for(i=1;i<=N;++i)
viz[i]=false;
while(top>0)
{
nod=st[top--];
if(!viz[nod])
{
++nrsol;
Dfs2(nod);
}
}
ofstream fout("ctc.out");
fout<<nrsol<<"\n";
for(i=1;i<=nrsol;++i)
{
len=sol[i].size();
for(j=0;j<len;j++)
fout<<sol[i][j]<<" ";
fout<<"\n";
}
fout.close();
}
int main()
{
Read();
Solve();
return 0;
}