Cod sursa(job #1439739)

Utilizator GeiGeiGeorge Cioroiu GeiGei Data 23 mai 2015 00:58:17
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
//004
#include <cstdio>
#include <cstdlib>
#include <list>
#include <vector>
#define li list<long>::iterator

using namespace std;

bool ver[50000];
list<long> ord;
list<long> dir[50000];
long n, m;

void next(long poz) {
    if (ver[poz])
        return;
    for (li it = dir[poz].begin(); it != dir[poz].end(); it++)
        next(*it);

    ver[poz] = true;
    ord.push_front(poz + 1);
}

int main() {
    FILE* fi = fopen("sortaret.in", "rt");
    FILE* fo = fopen("sortaret.out", "wt");

    fscanf(fi, "%ld%ld", &n, &m);

    for (int i = 0; i < n; i++)
        ver[i] = false;


    for (long i = 0; i < m; i++) {
        long a, b;
        fscanf(fi, "%ld%ld", &a, &b);
        a--; b--;
        dir[a].push_back(b);
    }

    long poz = 0;
    while(poz < n) {
        if (ver[poz])
            poz++;
        else
            next(poz);
    }

    for (li it = ord.begin(); it != ord.end(); it++)
        fprintf(fo, "%ld ", *it);

    return 0;
}