Pagini recente » Cod sursa (job #344998) | Cod sursa (job #1398473) | Cod sursa (job #696606) | Cod sursa (job #1048576) | Cod sursa (job #2142427)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#define Nmax 100005
using namespace std;
ifstream fin ("ctc.in");
ofstream fout ("ctc.out");
vector <int> G[Nmax];
vector <int> T[Nmax],sol[Nmax];
int n,m,nrsol;
int v[Nmax];
stack <int> s;
void DFS1 (int nod)
{
int i,vec;
v[nod]=1;
for (i=0;i<G[nod].size();i++)
{
vec=G[nod][i];
if (v[vec]==0)
DFS1(vec);
}
s.push(nod);
}
void DFS2(int nod)
{
int i,vec;
sol[nrsol].push_back(nod);
v[nod]=1;
for (i=0;i<T[nod].size();i++)
{
vec=T[nod][i];
if (v[vec]==0)
DFS2(vec);
}
}
int main()
{
int i,j,x,y;
fin>>n>>m;
for (i=1;i<=m;i++)
{
fin>>x>>y;
G[x].push_back(y);
T[y].push_back(x);
}
for (i=1;i<=n;i++)
{
if (v[i]==0)
DFS1(i);
}
for (i=1;i<=n;i++)
v[i]=0;
while (!s.empty())
{
x=s.top();
if (v[x]==0)
{
nrsol++;
DFS2(x);
}
s.pop();
}
fout<<nrsol<<"\n";
for (i=1;i<=nrsol;i++)
{
for (j=0;j<sol[i].size();j++)
fout<<sol[i][j]<<" ";
fout<<"\n";
}
fin.close();
fout.close();
return 0;
}