Pagini recente » Cod sursa (job #3199546) | Cod sursa (job #1626940) | Cod sursa (job #1349466) | Cod sursa (job #412841) | Cod sursa (job #2209705)
#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;
}