Pagini recente » Cod sursa (job #386487) | Cod sursa (job #1799332) | Cod sursa (job #2065634) | Cod sursa (job #484057) | Cod sursa (job #2285433)
#include <cstdio>
#include <vector>
using namespace std;
vector <int> b[100004],v[100004],vt[100004];
int n,m,x,y,nr,r,i,j,k,xi,yi,a[100004];
bool sel[100004];
void g (int x)
{
int i,k;
sel[x]=true;
k=v[x].size()-1;
for (i=0;i<=k;i++)
{
if (sel[v[x][i]]==false)
g(v[x][i]);
}
a[++nr]=x;
return;
}
void c (int x)
{
int i,k;
b[r].push_back(x);
sel[x]=true;
k=vt[x].size()-1;
for (i=0;i<=k;i++)
{
if (sel[vt[x][i]]==false)
c(vt[x][i]);
}
return;
}
int main()
{
freopen ("ctc.in","r",stdin);
freopen ("ctc.out","w",stdout);
scanf ("%d %d", &n, &m);
for (i=1;i<=m;i++)
{
scanf ("%d %d", &x, &y);
v[x].push_back(y);
vt[y].push_back(x);
}
for (i=1;i<=n;i++)
sel[i]=false;
nr=0;
for (i=1;i<=n;i++)
{
if (sel[i]==false)
g(i);
}
for (i=1;i<=n;i++)
sel[i]=false;
r=0;
for (i=n;i>=1;i--)
{
if (sel[a[i]]==false)
{
r++;
c(a[i]);
}
}
printf ("%d\n", r);
for (i=1;i<=r;i++)
{
k=b[i].size()-1;
for (j=0;j<=k;j++)
printf ("%d ", b[i][j]);
printf ("\n");
}
return 0;
}