Cod sursa(job #1128406)

Utilizator muresan_bogdanMuresan Bogdan muresan_bogdan Data 27 februarie 2014 16:55:33
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<fstream>
#include<iostream>
#include<vector>
#include<queue>
using namespace std;

ifstream fin("sortaret.in");
ofstream fout("sortaret.out");

struct nod{
    int grad;
    vector<int> vecini;
};

int n, m, i, x, y;
nod g[50001];
queue<int> coada;

void call(int x) {
    int j;
    for(j = 0; j < g[x].vecini.size(); j++) {
        int vecin = g[x].vecini[j];
        g[vecin].grad--;
        if(g[vecin].grad == 0) {
            coada.push(vecin);
        }
    }
}

int main() {
    fin >> n >> m;
    for(i = 0; i < m; i++) {
        fin >> x >> y;
        g[y].grad++;
        g[x].vecini.push_back(y);
    }
    for(i = 1; i <= n; i++) {
        if(g[i].grad == 0) {
            coada.push(i);
        }
    }
    while(!coada.empty()) {
        int aux = coada.front();
        coada.pop();
        fout << aux << ' ';
        call(aux);
    }
    fin.close();
    fout.close();
    return 0;
}