Cod sursa(job #1161707)

Utilizator SRaduRadu Szasz SRadu Data 31 martie 2014 13:31:36
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#include <queue>
#include <vector>

using namespace std;

const int MAX = 50505;

int N, M;
int Grad[MAX];

vector<int> G[MAX];
queue<int> Q;

void citire() {
    ifstream in("sortaret.in");
    in >> N >> M;
    for(int i = 1, A, B; i <= M; i++) {
        in >> A >> B;
        G[A].push_back(B);
        Grad[B]++;
    } in.close();
}

void solve() {
    ofstream out("sortaret.out");
    for(int i = 1; i <= N; i++) {
        if(!Grad[i]) 
            Q.push(i);
    }
    while(!Q.empty()) {
        int nod = Q.front(); Q.pop();
        out << nod << " ";
        for(size_t i = 0; i < G[nod].size(); i++) {
            int vecin = G[nod][i];
            if(--Grad[vecin] == 0)
                Q.push(vecin);
        }
    } out.close();
}

int main() {
    citire();
    solve();
}