Pagini recente » Cod sursa (job #2868172) | Cod sursa (job #3289155) | Cod sursa (job #1687819) | Cod sursa (job #861242) | Cod sursa (job #2419186)
#include <bits/stdc++.h>
#define NMAX 100001
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
int n,m,used[NMAX];
vector< int > v[NMAX],g[NMAX],sol[NMAX];
deque< int > q;
int tare;
void dfs1( int k)
{
used[k]=1;
for( auto x :v[k])
if(!used[x])
dfs1(x);
q.push_back(k);
}
void dfs( int k)
{
sol[tare].push_back(k);
used[k]=1;
for(auto x: g[k])
if(!used[x])dfs(x);
}
int main()
{
fin>>n>>m;
while(m)
{
int x, y;
fin>>x>>y;
v[x].push_back(y);
g[y].push_back(x);
--m;
}
for(int i=1;i<=n;++i)
if(!used[i])dfs1(i);
memset(used, 0, sizeof(used));
while(q.size())
{
int t=q.back();
q.pop_back();
if(!used[t])
{
++tare;
dfs(t);
}
}
fout<<tare<<"\n";
for(int i=1;i<=tare;++i,fout<<"\n")
for(int j=0;j<sol[i].size();++j)fout<<sol[i][j]<<" ";
return 0;
}