Cod sursa(job #215405)
#include<stdio.h>
int n,m,i,x,y;
char viz[50001];
int lista[50001];
struct Nod {
int d;
Nod *next;
};
Nod *a[50001];
int df(int s)
{
int nodurm;
viz[s]=1;
for(Nod *it=a[s];it!=NULL;it=it->next)
{
nodurm = it->d;
if (!viz[nodurm])
df(nodurm);
}
lista[++lista[0]] = s;
return 0;
}
int insert(Nod *&k,int s)
{
Nod *x = new Nod;
x->d=s;
x->next=k;
k=x;
return 0;
}
int main()
{
freopen("sortaret.in","r",stdin);
freopen("sortaret.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d %d",&x,&y);
insert(a[x],y);
}
for(i=1;i<=n;i++)
if (!viz[i])
df(i);
for(i=lista[0];i>0;i--)
printf("%d ",lista[i]);
printf("\n");
return 0;
}