Pagini recente » Cod sursa (job #108733) | Borderou de evaluare (job #1036302) | Cod sursa (job #2636745) | Cod sursa (job #842740) | Cod sursa (job #1610156)
#include <fstream>
#include <vector>
#include <algorithm>
#define dim 100005
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
int n,i,j,a,b,viz[dim],k,s[dim],m;
vector<int> v[dim],sol[dim],f[dim];
void DFS(int nod){
viz[nod]=0;
sol[k].push_back(nod);
for(int i=0;i<f[nod].size();i++){
if(viz[f[nod][i]]==1){
DFS(f[nod][i]);
}
}
}
void dfs(int nod){
viz[nod]=1;
for(int i=0;i<v[nod].size();i++){
if(viz[v[nod][i]]==0){
dfs(v[nod][i]);
}
}
s[++k]=nod;
}
int main(){
fin>>n>>m;
for(i=1;i<=m;i++){
fin>>a>>b;
v[a].push_back(b);
f[b].push_back(a);
}
for(i=1;i<=n;i++){
if(viz[i]==0){
dfs(i);
}
}
k=0;
for(i=n;i>=1;i--){
if(viz[s[i]]){
k++;
DFS(s[i]);
}
}
fout<<k<<"\n";
for(i=1;i<=k;i++){
sort(sol[i].begin(),sol[i].end());
for(j=0;j<sol[i].size();j++){
fout<<sol[i][j]<<" ";
}
fout<<"\n";
}
return 0;
}