Pagini recente » Cod sursa (job #856634) | Cod sursa (job #573930) | Cod sursa (job #2909010) | Cod sursa (job #2642234) | Cod sursa (job #3153107)
#include <bits/stdc++.h>
using namespace std;
#define FAST ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0) ;
ifstream fin("ctc.in") ;
ofstream fout("ctc.out") ;
const int NMAX=1e+5 ;
vector <int> g[NMAX],ctc[NMAX],gt[NMAX],viz,st ;
int n,m,x,y,cnt ;
void dfs(int nod)
{
if(!viz[nod])
{
viz[nod]=1 ;
for(int it:g[nod]) dfs(it) ;
st.push_back(nod) ;
}
}
void dfsrev(int nod)
{
if(!viz[nod])
{
viz[nod]=cnt ;
for(int it: gt[nod]) dfsrev(it) ;
}
}
int main()
{
fin>>n>>m ;
for(int i=1; i<=m; ++i)
{
fin>>x>>y ;
g[x].push_back(y) ;
gt[y].push_back(x);
}
viz=vector <int> (NMAX,0) ;
for(int i=1; i<=n; ++i) if(!viz[i]) dfs(i) ;
viz=vector <int> (NMAX,0) ;
for(int i=st.size()-1; i>=0; --i) if(!viz[st[i]]) cnt++,dfsrev(st[i]) ;
for(int i=1; i<=n; ++i) ctc[viz[i]].push_back(i) ;
fout<<cnt<<'\n' ;
for(int i=1; i<=cnt; ++i,fout<<'\n')
for(int it:ctc[i]) fout<<it<<" ";
return 0;
}