Pagini recente » Cod sursa (job #1839054) | Cod sursa (job #549974) | Cod sursa (job #1931180) | Cod sursa (job #1931853) | Cod sursa (job #1108645)
#include <iostream>
#include <cstdio>
using namespace std;
struct Nod{int inf; Nod* leg;};
typedef Nod* nod;
nod a[100001],b[100001],s,c[100001];
int n,m,k;
bool viz[100001],viz2[100001];
void afisare(nod q)
{
if(q){cout<<q->inf<<" "; afisare(q->leg);}
else cout<<endl;
}
/*void adaug(nod &q, int x)
{
nod p=new Nod;
p->inf=x;
p->leg=q;
q=p;
}*/
void adaug(int x, int y)
{
nod p=new Nod;
p->inf=y;
p->leg=a[x];
a[x]=p;
}
void adaug2(int x, int y)
{
nod p=new Nod;
p->inf=y;
p->leg=b[x];
b[x]=p;
}
void adaug3(int x)
{
nod p=new Nod;
p->inf=x;
p->leg=s;
s=p;
}
void adaug4(int x, int y)
{
nod p=new Nod;
p->inf=y;
p->leg=c[x];
c[x]=p;
}
void parc(int i)
{
nod j;
viz[i]=1;
for(j=a[i]; j; j=j->leg)
if (!viz[j->inf])
parc(j->inf);
//adaug(s,i);
adaug3(i);
}
void parc2(int i)
{
viz2[i]=1;//
//adaug(c[k],i);
adaug4(k,i);
for(nod j=b[i]; j; j=j->leg) if (!viz2[j->inf]) parc2(j->inf);//
}
int main()
{
freopen ("ctc.in","r",stdin);
freopen ("ctc.out","w",stdout);
int i,x,y;
cin>>n>>m;
for(i=1; i<=m; i++)
{
cin>>x>>y;
//adaug(a[x],y);
//adaug(b[y],x);
adaug(x,y);
adaug2(y,x);
}
for(i=1; i<=n; i++)
if(!viz[i])
parc(i);
while(s)
{
if (!viz2[s->inf])//
{
k++;
parc2(s->inf);
}
s=s->leg;
}
cout<<k<<"\n";
for(i=1; i<=k; i++)
afisare(c[i]);
return 0;
}