Pagini recente » Cod sursa (job #48267) | Cod sursa (job #1475542) | Cod sursa (job #1107982) | Cod sursa (job #3273748) | Cod sursa (job #2720073)
#include <bits/stdc++.h>
#define N 100001
#define pb push_back
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
int n, m, i, j, viz[N], k, x, y;
vector<int> v[N], comp[N], v2[N];
stack<int> stk;
void dfs(int nod)
{
viz[nod]=1;
for(auto i:v[nod])
if(!viz[i])
dfs(i);
stk.push(nod);
}
void dfs2(int nod)
{
viz[nod]=1;
comp[k].pb(nod);
for(auto i:v2[nod])
if(!viz[i])
dfs2(i);
}
int main()
{
fin>>n>>m;
for(i=1;i<=m;++i)
{
fin>>x>>y;
v[x].pb(y);
}
for(i=1;i<=n;++i)
if(!viz[i])
dfs(i);
for(i=1;i<=n;++i)
for(auto j:v[i])
v2[j].pb(i);
for(i=1;i<=n;++i)
viz[i]=0;
while(!stk.empty())
{
int tp=stk.top();
stk.pop();
if(viz[tp])
continue;
++k;
dfs2(tp);
}
fout<<k<<'\n';
for(i=1;i<=k;++i,fout<<'\n')
for(auto j:comp[i])
fout<<j<<' ';
return 0;
}