Pagini recente » Cod sursa (job #3222152) | Cod sursa (job #375420) | Cod sursa (job #58517) | Cod sursa (job #225156) | Cod sursa (job #3235808)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
vector <int> d[100001],rez[100001],v;
long long n,m,x,y,nr,f[100001],viz[100001];
long long Tarjan(int k,int ad)
{
v.push_back(k);
viz[k]=1;
f[k]=ad;
for(vector <int>::iterator it=d[k].begin(); it<d[k].end(); it++)
{
if(!f[*it])
f[k]=min(f[k],Tarjan(*it,ad+1));
else if(viz[k]==1)
f[k]=min(f[*it],f[k]);
}
if(f[k]==ad)
{
nr++;
while(v.back()!=k)
{
rez[nr].push_back(v.back());
viz[v.back()]=0;
v.pop_back();
}
rez[nr].push_back(v.back());
viz[v.back()]=0;
v.pop_back();
}
return f[k];
}
int main()
{
fin>>n>>m;
for(int i=1; i<=m; i++)
{
fin>>x>>y;
d[x].push_back(y);
}
Tarjan(1,1);
fout<<nr;
for(int i=1;i<=nr;i++)
{
fout<<'\n';
for(auto it=rez[i].begin(); it<rez[i].end();it++)
fout<<*it<<' ';
}
return 0;
}