Pagini recente » Cod sursa (job #1551460) | Cod sursa (job #2207253) | Cod sursa (job #583225) | Cod sursa (job #3185300) | Cod sursa (job #3204630)
#include <bits/stdc++.h>
#define NMAX 100007
#define pb push_back
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
int n,m;
vector<int> g[NMAX],gt[NMAX];
bool vis[NMAX];
stack<int> s;
void dfs1(int nod){
vis[nod]=1;
for(auto it:g[nod])
if(!vis[it])
dfs1(it);
s.push(nod);
}
vector<vector<int> > v;
vector<int> aux;
void dfs2(int nod){
vis[nod]=1;
aux.pb(nod);
for(auto it:gt[nod])
if(!vis[it])
dfs2(it);
}
int main(){
fin >> n >> m;
for(int i=1; i<=m; i++){
int x,y;
fin >> x >> y;
g[x].pb(y);
gt[y].pb(x);
}
for(int i=1; i<=n; i++)
if(!vis[i])
dfs1(i);
memset(vis,0,sizeof(vis));
while(s.size()){
int x=s.top();
s.pop();
if(!vis[x]){
aux.clear();
dfs2(x);
v.pb(aux);
}
}
fout << v.size() << "\n";
for(auto it:v){
for(auto i:it)
fout << i << " ";
fout << "\n";
}
return 0;
}