Pagini recente » Rating Reu Stefan (StefanRLN) | Cod sursa (job #1460398) | Istoria paginii runda/oni2007.11-12.ziua1 | Cod sursa (job #3219340) | Cod sursa (job #2011202)
#include<fstream>
#include<iostream>
#include<vector>
#include<stack>
#define DN 100005
using namespace std;
ifstream fin("ctc.in");
ofstream fout("ctc.out");
vector<int>v[DN];
vector<int>r[DN];
stack<int>s;
int n,m,x,y,a[DN],e[DN],low[DN],rez,nr;
void dfs(int x)
{
s.push(x);
nr++;
low[x]=a[x]=nr;
e[x]=1;
for(auto i:v[x])
{
if(a[i]==0)
{
a[i]=a[x]+1;
dfs(i);
low[x]=min(low[x],low[i]);
}
else
if(e[i])
low[x]=min(low[x],low[i]);
}
if(a[x]==low[x])
{
rez++;
int nod;
do
{
nod=s.top();
s.pop();
e[nod]=0;
r[rez].push_back(nod);
}while(nod!=x);
}
}
int main()
{
fin>>n>>m;
for(int i=1;i<=m;i++)
{
fin>>x>>y;
v[x].push_back(y);
}
for(int i=1;i<=n;i++)
if(a[i]==0)
{
a[i]=1;
dfs(i);
}
fout<<rez<<'\n';
for(int i=1;i<=rez;i++)
{
for(auto j:r[i])
fout<<j<<' ';
fout<<'\n';
}
}