Cod sursa(job #1118084)

Utilizator cbanu96Banu Cristian cbanu96 Data 23 februarie 2014 23:33:03
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <cstdio>
#include <vector>

using namespace std;

#define FILEIN "sortaret.in"
#define FILEOUT "sortaret.out"
#define NMAX 50005

vector<int> A[NMAX];
int degIn[NMAX];
int n, m;
vector<int> sol;

int main() {
    freopen(FILEIN, "r", stdin);
    freopen(FILEOUT, "w", stdout);

    scanf("%d %d", &n, &m);
    for ( int i = 1, x, y; i <= m; i++ ) {
        scanf("%d %d", &x, &y);
        A[x].push_back(y);
        degIn[y]++;
    }

    for ( int i = 1; i <= n; i++ ) {
        if (!degIn[i])
            sol.push_back(i);
    }

    for ( int i = 0; i < n; i++ ) {
        int x = sol[i];
        for ( int j = 0; j < A[x].size(); j++ ) {
            degIn[A[x][j]]--;
            if (!degIn[A[x][j]])
                sol.push_back(A[x][j]);
        }
    }

    for ( int i = 0; i < n; i++ ) {
        printf("%d ", sol[i]);
    }
    printf("\n");

    return 0;
}