Pagini recente » Cod sursa (job #304630) | Cod sursa (job #2902640) | Cod sursa (job #1972790) | Cod sursa (job #1853604) | Cod sursa (job #2572544)
#include <iostream>
#include <stdlib.h>
#include <fstream>
#include <vector>
#define MAX 100010
using namespace std;
int n,m,x,y,ans;
bool acc[MAX];
vector<int> nn[MAX],nt[MAX],cc[MAX],vn;
void dfs(int nod,vector<int> nd[MAX],vector<int> &ca){
acc[nod]=1;
for(auto i:nd[nod])
if(!acc[i]){
dfs(i,nd,ca);
}
ca.push_back(nod);
}
int main()
{
ifstream f ("ctc.in");
ofstream g ("ctc.out");
f>>n>>m;
for(int i=1;i<=m;i++)
f>>x>>y,
nn[x].push_back(y),
nt[y].push_back(x);
for(int i=1;i<=n;i++)
if(!acc[i])dfs(i,nn,vn);
for(int i=1;i<=n;i++)acc[i]=0;
for(auto i:vn) cout<<i<<" ";
for(int i=n;i>=1;i--)
if(!acc[vn[i-1]])dfs(vn[i-1],nt,cc[++ans]);
g<<ans<<'\n';
for(int i=1;i<=ans;i++){
for(auto j:cc[i])g<<j<<" ";
g<<'\n';
}
f.close ();
g.close ();
return 0;
}