Pagini recente » Cod sursa (job #1865364) | Cod sursa (job #2598432) | Cod sursa (job #500714) | Cod sursa (job #529171) | Cod sursa (job #3276109)
#include <fstream>
#include <vector>
#include <string.h>
#include <set>
#define nmx 200005
using namespace std;
ifstream cin("ctc.in");
ofstream cout("ctc.out");
int n,m,x,y,viz[nmx],ct;
vector<int> v[nmx],vt[nmx],s;
set<int> rsp[nmx];
void dfs(int nod)
{
viz[nod]=1;
for(auto e:v[nod])
if(!viz[e])
dfs(e);
s.emplace_back(nod);
}
void dfst(int nod)
{
rsp[ct].insert(nod);
viz[nod]=1;
for(auto e:vt[nod])
if(!viz[e])
dfst(e);
}
int main()
{
cin>>n>>m;
for(int i=1; i<=m; i++)
{
cin>>x>>y;
v[x].emplace_back(y);
vt[y].emplace_back(x);
}
for(int i=1; i<=n; i++)
if(!viz[i])
dfs(i);
memset(viz,0,sizeof(viz));
for(auto it=s.rbegin(); it!=s.rend(); it++)
if(!viz[*it])
{
ct++;
dfst(*it);
}
cout<<ct<<'\n';
for(int i=1; i<=ct; i++,cout<<'\n')
for(auto e:rsp[i])
cout<<e<<' ';
}