Pagini recente » Cod sursa (job #1996213) | Cod sursa (job #1353770) | Cod sursa (job #65912) | Cod sursa (job #2835047) | Cod sursa (job #3276117)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("ctc.in");
ofstream cout("ctc.out");
vector<int> v[10001],vgt[10001],sol,rsp[10001];
bool viz[10001];
int n,m,x,y,ct;
void dfs(int nod)
{
viz[nod]=1;
for(auto e:v[nod])
if(!viz[e])
dfs(e);
sol.emplace_back(nod);
}
void dfsgt(int nod)
{
viz[nod]=1;
for(auto e:vgt[nod])
if(!viz[e])
dfsgt(e);
rsp[ct].emplace_back(nod);
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>x>>y;
v[x].emplace_back(y);
vgt[y].emplace_back(x);
}
for(int i=1;i<=n;i++)
{
if(viz[i]==0)
dfs(i);
}
fill(viz+1,viz+n+1,0);
for(auto it=sol.rbegin();it!=sol.rend();it++)
{
if(viz[*it]==0)
{
ct++;
dfsgt(*it);
}
}
cout<<ct<<'\n';
for(int i=1;i<=ct;i++,cout<<'\n')
for(auto e:rsp[i])
cout<<e<<' ';
}