Pagini recente » Cod sursa (job #1879898) | Cod sursa (job #1544766) | Cod sursa (job #2037693) | Cod sursa (job #2088928) | Cod sursa (job #278468)
Cod sursa(job #278468)
#include<stdio.h>
#define Nmax 50010
int n,v[Nmax],uz[Nmax],gre[Nmax],vf;
struct nod
{
int info;
nod *urm;
};
typedef nod *Lista;
Lista L[Nmax];
inline void Insert(Lista &prim,Lista p,int x)
{
Lista q=new nod;
q->info=x;
if(prim){q->urm=p->urm; p->urm=q;}
else {q->urm=prim; prim=q;}
}
void add(Lista &prim,int x)
{
if(!prim) {Insert(prim,NULL,x);return;}
Lista p;
for(p=prim;p;p=p->urm)
if(p->info==x) return;
for(p=prim;p->urm&&p->urm->info<x;p=p->urm);
Insert(prim,p,x);
}
void DFS(int);
int main()
{int i,m,x,y;
freopen("sortaret.in","rt",stdin);
freopen("sortaret.out","wt",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=m;++i)
{scanf("%d %d",&x,&y);
add(L[x],y);
gre[y]++;
}
for(i=1;i<=n;++i)
if(gre[i]==0) v[++vf]=i;
DFS(1);
for(i=1;i<=vf;++i) printf("%d ",v[i]);
return 0;
}
void DFS(int x)
{
uz[x]=1;
for(Lista p=L[x];p;p=p->urm)
{
gre[p->info]--;
if(gre[p->info]==0) v[++vf]=p->info;
DFS(p->info);
}
}