Pagini recente » Cod sursa (job #471746) | Cod sursa (job #1590319) | Cod sursa (job #1618998) | Cod sursa (job #503340) | Cod sursa (job #2321398)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("ctc.in");
ofstream fout("ctc.out");
vector <int> v[200005];
vector <int> v2[200005];
vector <vector <int> > ans;
vector <int> H;
int uz[200005];
int n,m,x,y,i,j,k;
void citire()
{
fin>>n>>m;
for(i=1; i<=m; i++)
{
fin>>x>>y;
v[x].push_back(y);
v2[y].push_back(x);
}
}
void dfs(int nod)
{
uz[nod]=1;
for(auto it : v[nod])
{
if(uz[it]) continue;
dfs(it);
}
H.push_back(nod);
}
void dfs2(int nod)
{
uz[nod]=1;
for(auto it : v2[nod])
{
if(uz[it]) continue;
dfs2(it);
}
ans.back().push_back(nod);
}
int main()
{
citire();
for(int i=1; i<=n; i++)
if(!uz[i])
dfs(i);
memset(uz,0,sizeof(uz));
for(int i=H.size()-1; i>=0; i--)
if(!uz[H[i]])
{
ans.push_back(vector<int>());
dfs2(H[i]);
k++;
}
fout<<k<<endl;
for(auto i: ans)
{
sort(i.begin(),i.end());
for(auto j: i)
fout<<j<<" ";
fout<<endl;
}
return 0;
}