Cod sursa(job #1987279)

Utilizator MaligMamaliga cu smantana Malig Data 30 mai 2017 08:59:50
Problema Sortare topologica Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <vector>
#include <queue>

using namespace std;
ifstream in("sortaret.in");
ofstream out("sortaret.out");

#define ll long long
#define pb push_back
const int NMax = 5e4 + 5;
const ll inf = 9e18 + 5;

int N,M,nrSol;
int inDeg[NMax],sol[NMax];
vector<int> v[NMax];

int main() {
    in>>N>>M;
    for (int i=1;i <= M;++i) {
        int a,b;
        in>>a>>b;

        v[a].pb(b);
        ++inDeg[b];
    }

    queue<int> Q;
    for (int i=1;i <= N;++i) {
        if (!inDeg[i]) {
            Q.push(i);
        }
    }

    while (Q.size()) {
        int node = Q.front();
        Q.pop();
        sol[++nrSol] = node;

        for (int nxt : v[node]) {
            --inDeg[nxt];
            if (!inDeg[nxt]) {
                Q.push(nxt);
            }
        }
    }

    for (int i=1;i <= N;++i) {
        out<<sol[i]<<' ';
    }
    out<<'\n';

    in.close();out.close();
    return 0;
}