Cod sursa(job #2209705)

Utilizator ClauBossClaudiu Bratu ClauBoss Data 4 iunie 2018 13:31:10
Problema Sortare topologica Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <queue>
#include <algorithm>
#include <vector>
#include <list>
#include <algorithm>
#include <iostream>

using namespace std;

#define NMAX 50000

queue<int> q;
int numNodes, numEdges, inDegree[NMAX];
vector<list<int>> adjList(NMAX);

ifstream fIn("sortaret.in");
ofstream fOut("sortaret.out");

int main(void) {
    int x, y, currNode, i = 0;
    fIn >> numNodes >> numEdges;

    for(register int i = 0; i < numEdges; ++i) {
        fIn >> x >> y;
        adjList[x].push_back(y);
        ++inDegree[y];
    }

    for_each(adjList.begin(), adjList.end(), [&i](list<int> &l) {
        std::cout << i++ << ": ";
        for_each(l.begin(), l.end(), [](int node) {
            std::cout << node << ' ';
        });

        std::cout << '\n';
    });

    for(int i = 1; i <= numNodes; ++i) {
        if (!inDegree[i]) {
            q.push(i);
        }
    }

    while (!q.empty()) {
        currNode = q.front();
        q.pop();

        fOut << currNode << ' ';

        for(auto &it : adjList[currNode]) {
            if (!--inDegree[it]) {
                q.push(it);
            }
        }
    }
    fOut << '\n';

    fIn.close();
    fOut.close();
    return 0;
}