Pagini recente » Cod sursa (job #262121) | Profil commercialgas699 | Cod sursa (job #535414) | Cod sursa (job #69766) | Cod sursa (job #246874)
Cod sursa(job #246874)
#include <iostream.h>
#include <fstream.h>
#define IN "ctc.in"
#define OUT "ctc.out"
#define maxx 100100
ifstream fin(IN);
ofstream fout(OUT);
int n,m;
struct lista
{
int nod;
lista *urm;
}*g[maxx],*gt[maxx];
int u[maxx];
int st[maxx];
int nst;
void citire();
void add(int x,int y,int alt);
void df1(int nod);
void df20(int nod);
void df21(int nod);
void afis()
{
int i;
lista *q;
for(i=1;i<=n;i++)
{
q=g[i];
fout<<i<<" ";
while(q)
{
fout<<q->nod<<" ";
q=q->urm;
}
fout<<endl;
}
}
int main()
{
int i,nrr=0;
citire();
fin.close();
for(i=1;i<=n;i++)
if(!u[i])
df1(i);
memset(u,0,sizeof(u));
for(i=n-1;i>=0;i--)
if(!u[st[i]])
{
df21(st[i]);
nrr++;
}
fout<<nrr<<endl;
memset(u,0,sizeof(u));
for(i=n-1;i>=0;i--)
if(!u[st[i]])
{
df20(st[i]);
fout<<endl;
}
//afis();
fout.close();
return 0;
}
void citire()
{
int i;
int x,y;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x;
fin>>y;
add(x,y,1);
add(y,x,2);
}
}
void add(int x,int y,int aux)
{
lista *q;
q=new lista;
if(aux==1)
{
q->nod=y;
q->urm=g[x];
g[x]=q;
}
else
{
q->nod=y;
q->urm=gt[x];
gt[x]=q;
}
}
void df1(int nod)
{
lista *p;
u[nod]=1;
for(p=g[nod];p!=NULL;p=p->urm)
if(!u[p->nod])
df1(p->nod);
st[nst++]=nod;
}
void df20(int nod)
{
lista *p;
u[nod]=1;
fout<<nod<<" ";
for(p=gt[nod];p!=NULL;p=p->urm)
if(!u[p->nod])
df20(p->nod);
}
void df21(int nod)
{
lista *p;
u[nod]=1;
//fout<<nod<<" ";
for(p=gt[nod];p!=NULL;p=p->urm)
if(!u[p->nod])
df21(p->nod);
}