Pagini recente » Rating Florence Smith (8gabriellae65100xdrb3) | Cod sursa (job #1454544) | Cod sursa (job #1595518) | Cod sursa (job #1528258) | Cod sursa (job #1369596)
#include <fstream>
#include <stack>
using namespace std;
ifstream in("ctc.in");
ofstream out("ctc.out");
int n, m, nr, lst[100001], lstr[100001], vf[200001], vfr[200001], urm[200001], urmr[200001], ccx[100001], index[100001];
bool viz[100001];
stack <int> s;
void dus(int x)
{
//out<<x<<" ";
int p, y;
viz[x]=true;
p=lst[x];
while(p)
{
y=vf[p];
if(!viz[y]) dus(y);
p=urm[p];
}
s.push(x);
}
void intors(int x)
{
int p, y;
ccx[++nr]=x;
viz[x]=true;
p=lstr[x];
while(p)
{
y=vfr[p];
if(!viz[y]) intors(y);
p=urmr[p];
}
}
int main()
{
int i, j=0, x, y;
in>>n>>m;
for(i=1;i<=m;i++)
{
in>>x>>y;
vf[i]=y;
urm[i]=lst[x];
lst[x]=i;
vfr[i]=x;
urmr[i]=lstr[y];
lstr[y]=i;
}
for(i=1;i<=n;i++) if(!viz[i]) dus(i);
for(i=1;i<=n;i++) viz[i]=false;
for(i=1;i<=n;i++)
{
x=s.top();
s.pop();
if(!viz[x])
{
index[++j]=x;
intors(x);
}
}
out<<j;
j=1;
for(i=1;i<=nr;i++)
{
if(index[j]==ccx[i])
{
j++;
if(index[j]!=ccx[i+1])
{
out<<"\n"<<ccx[i]<<" ";
}
}
else out<<ccx[i]<<" ";
}
return 0;
}