Pagini recente » Cod sursa (job #2956450) | Cod sursa (job #120344) | Cod sursa (job #3302816) | Cod sursa (job #971038) | Cod sursa (job #3319790)
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
//ifstream cin("ctc.in");
//ofstream cout("ctc.out");
vector<int> v[100005],g[100005],sol[100005];
stack<int> s;
int n,m,i,x,y,j,nr,ctc[100005];
bool viz1[100005],viz2[100005];
void dfs(int nod)
{
viz1[nod]=1;
for(auto x:v[nod])
{
if(viz1[x]==0) dfs(x);
}
s.push(nod);
}
void dfs2(int nod)
{
viz2[nod]=1;
sol[nr].push_back(nod);
for(auto x:g[nod])
{
if(viz2[x]==0) dfs2(x);
}
}
int main()
{
cin>>n>>m;
for(i=1;i<=m;i++)
{
cin>>x>>y;
v[x].push_back(y);
g[y].push_back(x);
}
for(i=1;i<=n;i++)
{
if(!viz1[i])
{
dfs(i);
}
}
while(!s.empty())
{
int nod=s.top();
s.pop();
if(viz2[nod]) continue;
nr++;
dfs2(nod);
}
cout<<nr<<'\n';
for(i=1;i<=nr;i++)
{
for(auto x:sol[i]) cout<<x<<' ';
cout<<'\n';
}
return 0;
}