Cod sursa(job #1988322)

Utilizator infomaxInfomax infomax Data 2 iunie 2017 17:53:26
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <vector>

using namespace std;

ifstream F("sortaret.in");
ofstream G("sortaret.out");

int n, m, x, y, viz[50003];
struct node{node *prec, *urm; int info;};
node *u, *p;
struct node1{node1 *urm; int info;} *l[50003];

void dfs(int nod)
{
    viz[nod] = 1;
    node1 *prim;
    prim = l[nod]->urm;
    while(prim!= NULL)
    {
        if(!viz[prim->info])
            dfs(prim->info);
        prim = prim->urm;
    }
    node *q;
    q = new node;
    u->info = nod;
    u->urm = q;
    q->prec = u;
    q->urm = NULL;
    u = q;
}

int main()
{
    F >> n >> m;
    p = new node;
    u = new node;
    p->prec = NULL;
    p->urm = u;
    u->prec = p;
    u->urm = NULL;
    for(int i = 1; i <= n; ++ i)
        l[i] = new node1, l[i]->urm = NULL;
    node1 *q;
    for(int i = 1; i <= m; ++ i)
    {
        F >> x >> y;
        q = new node1;
        q->info = y;
        q->urm = l[x]->urm;
        l[x]->urm = q;
    }
    for(int i = 1; i <= n; ++ i)
    {
        if(!viz[i])
            dfs(i);
    }
    u = u->prec;
    while(u->prec != p->prec)
        G << u->info << " ", u = u->prec;
    return 0;
}