Pagini recente » Cod sursa (job #369488) | Cod sursa (job #2048823) | Cod sursa (job #1354594) | Cod sursa (job #1596665) | Cod sursa (job #408552)
Cod sursa(job #408552)
#include<stdio.h>
#include<vector>
#define Nmx 100001
using namespace std;
vector<int> GT[Nmx],G[Nmx],sol[Nmx];
int n,m,viz[Nmx],nrs,pre[Nmx],nr;
void citire()
{
int x,y;
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i)
{
scanf("%d%d",&x,&y);
G[x].push_back(y);
GT[y].push_back(x);
}
}
void dfs(int x)
{
vector<int>::iterator it;
viz[x]=1;
for(it=G[x].begin();it!=G[x].end();++it)
if(!viz[*it])
dfs(*it);
pre[++nr]=x;
}
void dfst(int x)
{
vector<int>::iterator it;
sol[nrs].push_back(x);
viz[x]=0;
for(it=GT[x].begin();it!=GT[x].end();++it)
if(viz[*it])
dfst(*it);
}
void solve()
{
for(int i=1;i<=n;++i)
if(!viz[i])
dfs(i);
for(int i=n;i>=1;--i)
if(viz[pre[i]])
{
++nrs;
dfst(pre[i]);
}
vector<int>::iterator it;
printf("%d\n",nrs);
for(int i=1;i<=nrs;++i)
{
for(it=sol[i].begin();it!=sol[i].end();++it)
printf("%d ",*it);
printf("\n");
}
}
int main()
{
freopen("ctc.in","r",stdin);
freopen("ctc.out","w",stdout);
citire();
solve();
return 0;
}