Pagini recente » Cod sursa (job #2663450) | Cod sursa (job #2758134) | Cod sursa (job #3261197) | Cod sursa (job #2242361) | Cod sursa (job #1642779)
#include <bits/stdc++.h>
#define pb push_back
#define Nmax 100005
using namespace std;
vector <int> L[Nmax],T[Nmax],Ctc[Nmax];
bool viz[Nmax],used[Nmax];
int v[Nmax],l,nrCtc;
inline void Dfs(int nod)
{
viz[nod]=1;
for(auto it : L[nod])
if(!viz[it]) Dfs(it);
v[++l]=nod;
}
inline void Dfs1(int nod)
{
used[nod]=1; Ctc[nrCtc].pb(nod);
for(auto it : T[nod])
if(!used[it]) Dfs1(it);
}
int main()
{
int m,n,x,y,i;
ifstream cin("ctc.in");
ofstream cout("ctc.out");
cin>>n>>m;
while(m--)
{
cin>>x>>y;
L[x].pb(y); T[y].pb(x);
}
for(i=1;i<=n;++i)
if(!viz[i]) Dfs(i);
for(i=n;i;--i)
if(!used[v[i]])
{
++nrCtc;
Dfs1(v[i]);
}
cout<<nrCtc<<"\n";
for(i=1;i<=nrCtc;++i)
{
for(auto it : Ctc[i]) cout<<it<<" ";
cout<<"\n";
}
return 0;
}