Pagini recente » Cod sursa (job #1613411) | Cod sursa (job #3129597) | Cod sursa (job #2781096) | Cod sursa (job #20910) | Cod sursa (job #3194199)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream in("ctc.in");
ofstream out("ctc.out");
int n,m,nr,x,y;
vector<vector<int>>a,b,r;
stack<int>s;
bool v[100010],v2[100010];
void stiva(int n)
{
v[n]=true;
for(auto x:a[n])
{
if(v[x]==false)
stiva(x);
}
s.push(n);
return;
}
void raspuns(int n)
{
v2[n]=true;
r[nr].push_back(n);
for(auto x:b[n])
{
if(v2[x]==false)
raspuns(x);
}
return;
}
int main()
{
in>>n>>m;
a.resize(n+5);
b.resize(n+5);
r.resize(n+5);
for(int i=1;i<=m;++i)
{
in>>x>>y;
a[x].push_back(y);
b[y].push_back(x);
}
for(int i=1;i<=n;++i)
{
if(v[i]==false)
stiva(i);
}
while(!s.empty())
{
int i=s.top();
s.pop();
if(v2[i]==false)
{
++nr;
raspuns(i);
}
}
out<<nr;
for(int i=1;i<=nr;++i)
{
out<<'\n';
for(auto x:r[i])
{
out<<x<<' ';
}
}
return 0;
}