Cod sursa(job #282369)

Utilizator victorsbVictor Rusu victorsb Data 17 martie 2009 16:22:24
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

#define FIN "sortaret.in"
#define FOUT "sortaret.out"
#define MAX_N 50015
#define PB push_back
#define SZ(A) (int)((A).size())

int N, M;
bool viz[MAX_N];
vector<int> lv[MAX_N];
vector<int> list;

void read() {
    scanf("%d %d", &N, &M);
    for (int i = 1; i <= M; ++i) {
        int a, b;
        scanf("%d %d", &a, &b);
        lv[a].PB(b);
    }
}

void DFS(int nod) {
    viz[nod] = true;
    for (int i = 0; i < SZ(lv[nod]); ++i)
        if (!viz[lv[nod][i]])
            DFS(lv[nod][i]);
    list.PB(nod);
}

void solve() {
    for (int i = 1; i <= N; ++i)
        if (!viz[i])
            DFS(i);
    
    reverse(list.begin(), list.end());
    for (int i = 0; i < N; ++i)
        printf("%d ", list[i]);
}

int main() {
    freopen(FIN, "r", stdin);
    freopen(FOUT, "w", stdout);
    read();
    solve();
    return 0;
}