Pagini recente » Cod sursa (job #2031734) | Cod sursa (job #1394810) | Cod sursa (job #3136216) | Cod sursa (job #195567) | Cod sursa (job #1192662)
#include <cstdio>
#define Nmax 100010
#define pb push_back
#include <vector>
#include <cstring>
using namespace std;
vector <int> g[Nmax],gt[Nmax],ctc[Nmax];
int n,m,i,x,y,c[Nmax],nr,sol;
bool sel[Nmax];
void load()
{
scanf("%d %d", &n, &m);
for (int i=1;i<=m;++i)
{
scanf("%d %d", &x, &y);
g[x].pb(y);
gt[y].pb(x);
}
}
inline void dfs(int x)
{
int i;
sel[x]=true;
for (i=0;i<g[x].size();++i)
if (!sel[g[x][i]])
dfs(g[x][i]);
c[++nr]=x;
}
inline void dfst(int x)
{
int i;
sel[x]=true;
for (i=0;i<gt[x].size();++i)
if (!sel[gt[x][i]]) dfst(gt[x][i]);
ctc[sol].pb(x);
}
int main()
{
freopen("ctc.in","r",stdin);
freopen("ctc.out","w",stdout);
load();
for (i=1;i<=n;++i)
if (!sel[i]) dfs(i);
memset(sel,0,sizeof(sel));
for (i=n;i>=1;--i)
if (!sel[c[i]])
{
++sol;
dfst(c[i]);
}
printf("%d\n",sol);
for (i=1;i<=sol;++i)
{
for(int j=0;j<ctc[i].size();++j)
printf("%d ",ctc[i][j]);
printf("\n");
}
return 0;
}