Pagini recente » Cod sursa (job #1806562) | Cod sursa (job #586369) | Cod sursa (job #1392310) | Cod sursa (job #2505165) | Cod sursa (job #3268954)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream in ("ctc.in");
ofstream out ("ctc.out");
vector <int> adj[ 100002];
vector <int> r[100002];
vector <int> adjT[100002];
int n;
int contor;
int m;
stack <int> s;
int viz[100002];
void dfs(int start){
viz[start]=1;
for(int i=0;i<adj[start].size();i++){
int vecin=adj[start][i];
if(viz[vecin]==0){
dfs(vecin);
}
}
s.push(start);
}
void dfsT(int start){
viz[start]=1;
for(int i=0;i<adjT[start].size();i++){
int vecin=adjT[start][i];
if(viz[vecin]==0){
dfsT(vecin);
}
}
r[contor].push_back(start);
}
int main(){
in>>n>>m;
int x,y;
for(int i=1;i<=m;i++){
in>>x>>y;
adj[x].push_back(y);
adjT[y].push_back(x);
}
for(int i=1;i<=n;i++){
if(viz[i]==0){
dfs(i);
}
}
for(int i=1;i<=n;i++)
viz[i]=0;
while(!s.empty()){
int i=s.top();
if(viz[i]==0){
dfsT(i);
contor++;
}
s.pop();
}
out<<contor<<'\n';
for(int i=0;i<contor;i++){
sort(r[i].begin(),r[i].end());
for(int j=0;j<r[i].size();j++){
out<<r[i][j]<<" ";
}
out<<'\n';
}
return 0;
}