Pagini recente » Cod sursa (job #2595423) | Cod sursa (job #1744236) | Cod sursa (job #211926) | Cod sursa (job #89174) | Cod sursa (job #2739524)
//#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream cin("ctc.in");
ofstream cout("ctc.out");
vector <int> v[100005],rev[100005],co[100005];
int viz[100005],order[100005],comp,cont;
void dfs(int nod){
viz[nod]=1;
for(auto u:v[nod]){
if(viz[u]==0){
dfs(u);
}
}
order[++cont]=nod;
}
void dfs_r(int nod){
viz[nod]=1;
co[comp].push_back(nod);
for(auto u:rev[nod]){
if(viz[u]==0){
dfs_r(u);
}
}
}
int main()
{
int n,m,a,b;
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>a>>b;
v[a].push_back(b);
rev[b].push_back(a);
}
for(int i=1;i<=n;i++){
if(viz[i]==0){
dfs(i);
}
}
for(int i=1;i<=n;i++){
viz[i]=0;
}
for(int i=n;i>=1;i--){
if(viz[order[i]]==0){
comp++;
dfs_r(order[i]);
}
}
cout<<comp<<"\n";
for(int i=1;i<=comp;i++){
for(auto u:co[i]){
cout<<u<<" ";
}
cout<<"\n";
}
return 0;
}