Cod sursa(job #315348)

Utilizator DraStiKDragos Oprica DraStiK Data 15 mai 2009 08:17:46
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <stdio.h>
#define DIM 50005
struct nod {int x;
            nod *urm;} *lst[DIM];
int grd[DIM],q[DIM];
int n,m,in,sf;
void add (int a,int b)
{
    nod *p=new nod;
    p->x=b;
    p->urm=lst[a];
    lst[a]=p;
}
void read ()
{
    int i,x,y;
	scanf ("%d%d",&n,&m);
    for (i=1; i<=m; ++i)
    {
        scanf ("%d%d",&x,&y);
        add (x,y);
        ++grd[y];
    }
}
void init ()
{
    int i;  
    for (i=1; i<=n; ++i)
        if (!grd[i])
            q[++sf]=i;
}
void solve ()
{
    nod *p;
    for (in=1; in<=sf; ++in)
    {
        printf ("%d ",q[in]);
        for (p=lst[q[in]]; p; p=p->urm)
        {
            --grd[p->x];
            if (!grd[p->x])
                q[++sf]=p->x;
        }
    }
}
int main ()
{
    freopen ("sortaret.in","r",stdin);
    freopen ("sortaret.out","w",stdout);
    read ();
    init ();
    solve ();
    return 0;
}