Cod sursa(job #166339)

Utilizator tm_raduToma Radu tm_radu Data 27 martie 2008 21:29:35
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdio.h>

int n, m;
int i, j, k;
int o[50001], s[50001];
typedef struct nod {
    int vf;
    nod* urm;
} NOD, *PNOD;
PNOD l[50001];

void Add(int i, int j);
void DF(int nod);

int main()
{
    freopen("sortaret.in", "r", stdin);
    freopen("sortaret.out", "w", stdout);
    scanf("%d %d", &n, &m);
    for ( k = 1; k <= m; k++ )
        scanf("%d %d", &i, &j),
        Add(i, j);
    k = n;
    
    for ( i = 1; i <= n; i++ )
        if ( !s[i] )
            DF(i);
    
    for ( i = 1; i <= n; i++ )
        printf("%d ", o[i]);
    printf("\n");
    
    return 0;
}

void Add(int i, int j)
{
    PNOD q = new NOD;
    q->vf = j;
    q->urm = l[i];
    l[i] = q;
}

void DF(int nod)
{
    s[nod] = 1;
    for ( PNOD q = l[nod]; q; q = q->urm )
        if ( !s[q->vf] )
            DF(q->vf);  
    o[k] = nod;
    k--;
}