Pagini recente » Cod sursa (job #1636956) | Cod sursa (job #2906400) | Cod sursa (job #151359) | Cod sursa (job #1292367) | Cod sursa (job #2223595)
#include <bits/stdc++.h>
using namespace std;
vector<int>v[100005];
vector<int>g[100005];
int viz[100005];
int st[100005];
int cp;
void dfs(int nod)
{
viz[nod]=1;
int sz=v[nod].size();
int i;
for(i=0;i<sz;i++)
{
int p=v[nod][i];
if(viz[p])continue;
if(!viz[p])dfs(p);
}
st[cp--]=nod;
}
vector<int>sol[100005];
int cnt1=0;
int viz1[100005];
void dfs1(int nod)
{
sol[cnt1].push_back(nod);
viz1[nod]=1;
int i;
int sz=g[nod].size();
for(i=0;i<sz;i++)
{
int p=g[nod][i];
if(viz1[p])continue;
if(!viz1[p])dfs1(p);
}
}
int main()
{
freopen("ctc.in","r",stdin);
freopen("ctc.out","w",stdout);
int m,n,x,y,i;
scanf("%d%d",&m,&n);
for(i=1;i<=n;i++)
{
scanf("%d%d",&x,&y);
v[x].push_back(y);
g[y].push_back(x);
}
cp=m;
dfs(1);
cp=1;
while(cp<=m)
{
if(!viz1[st[cp]])cnt1++,dfs1(st[cp]);
cp++;
}
printf("%d\n",cnt1);
for(i=1;i<=cnt1;i++)
{
int sz=sol[i].size();
for(int j=0;j<sz;j++)
{
printf("%d ",sol[i][j]);
}
printf("\n");
}
return 0;
}