Pagini recente » Cod sursa (job #1247250) | Cod sursa (job #2149046) | Cod sursa (job #1420664) | Cod sursa (job #62449) | Cod sursa (job #2153289)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
const int NMAX = 100005;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
vector <int> g[NMAX],gt[NMAX], sol[NMAX];
stack <int> st;
int viz1[NMAX], viz[NMAX], n,m;
int nr_comp;;
void cit()
{
int x,y;
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y;
g[x].push_back(y);
gt[y].push_back(x);
}
}
void timpi(int x)
{
int y;
viz[x]=1;
for( unsigned int i=0;i<g[x].size();++i)
{
y=g[x][i];
if(viz[y]==0)
timpi(y);
}
st.push(x);
}
void dfs(int x)
{
int y;
viz1[x]=1;
sol[nr_comp].push_back(x);
for(unsigned int i=0;i<gt[x].size();++i)
{
y = gt[x][i];
if(viz1[y]==0)
dfs(y);
}
}
void afis()
{
fout<<nr_comp<<'\n';
for(int i=1;i<=nr_comp;++i)
{
for(unsigned int j=0;j<sol[i].size();++j)
fout<< sol[i][j]<<" ";
fout<<'\n';
}
}
int main()
{
int x;
cit();
for(int i=1;i<=n;i++)
if(viz[i]==0)
timpi(i);
while(!st.empty())
{
x=st.top();
st.pop();
if(viz1[x]==0){
nr_comp++;
dfs(x);
}
}
afis();
return 0;
}